Heim  >  Artikel  >  Backend-Entwicklung  >  Benutzerdefinierte C#-Typ-Arrays und Array-Klasse

Benutzerdefinierte C#-Typ-Arrays und Array-Klasse

高洛峰
高洛峰Original
2016-12-16 14:27:504317Durchsuche

Array eines benutzerdefinierten Typs

using System;    
namespace ConsoleApplication4    
{    
    class Program    
    {    
        static void Main(string[] args)    
        {    
            Person[] myPersons = new Person[2];    
            myPersons[0] = new Person("Lilian", "Chen");    
            myPersons[1] = new Person("1", "2");    
            Console.WriteLine(myPersons[0].ToString());    
            Console.WriteLine(myPersons[1].ToString());    
            // 对自定义类型使用数组初始化器    
            Person[] persons = new Person[] {new Person("a", "b"), new Person("c", "d")};    
            Console.WriteLine(persons[1].ToString());    
            Console.ReadLine();    
        }    
    }    
    public class Person    
    {    
        public Person()    
        { }    
        public Person(string firstName, string lastName)    
        {    
            this.FirstName = firstName;    
            LastName = lastName;    
        }    
        public string FirstName    
        {    
            get;    
            set;    
        }    
        public string LastName    
        {    
            get;    
            set;    
        }    
        public override string ToString()    
        {    
            return String.Format("{0} {1}", FirstName, LastName);    
        }    
    }    
}

Hinweis: Wenn es sich bei den Elementen im Array um Referenztypen handelt, muss für jedes Array-Element Speicher zugewiesen werden.

myPersons ist eine auf dem Stapel gespeicherte Variable, die auf ein Array von Person-Elementen verweist, die auf dem verwalteten Heap gespeichert sind. Jedes Element im Array verweist auf ein Person-Objekt.

Benutzerdefinierte C#-Typ-Arrays und Array-Klasse

Erstellen eines Arrays

Die Verwendung von [] zum Deklarieren eines Arrays ist eine Notation für die Verwendung der Array-Klasse in C#. Ein neues Objekt, das von der abstrakten Basis abgeleitet wird Das Klassenarray wird im Hintergrund erstellt. Dadurch können Sie die von der Array-Klasse definierten Methoden und Eigenschaften für jedes C#-Array verwenden.

Die Array-Klasse ist eine abstrakte Klasse, daher können Sie den Konstruktor nicht zum Erstellen eines Arrays verwenden. Aber zusätzlich zum Erstellen einer Array-Instanz mit der C#-Syntax können Sie ein Array auch mit der statischen Methode CreateInstance() erstellen (die verwendet werden kann, wenn der Typ des Elements nicht im Voraus bekannt ist).

using System;    
namespace ConsoleApplication5    
{    
    class Program    
    {    
        static void Main(string[] args)    
        {    
            // CreateInstance 方法的第一个参数是元素的类型,第二个参数是数组的大小    
            Array intArray = Array.CreateInstance(typeof(int), 5);    
            for (int i = 0; i < intArray.Length; i++)    
            {    
                // 使用 SetValue() 方法设置值    
                intArray.SetValue(i, i);    
            }    
            for (int i = 0; i < intArray.Length; i++)    
            {    
                // 使用 GetValue() 方法读取值    
                Console.WriteLine(intArray.GetValue(i));    
                Console.ReadLine();    
            }    
            // 将已经创建的数组强制转换成声明为 int[] 的数组    
            int[] intArray1 = (int[])intArray;    
            Console.WriteLine(intArray1.Length);    
        }    
    }    
}

Verwenden Sie die Methode CreateInstance(), um mehrdimensionale Arrays und Arrays zu erstellen, die nicht 0-basiert sind:

using System;    
namespace ConsoleApplication4    
{    
    class Program    
    {    
        static void Main(string[] args)    
        {    
            int[] lengths = { 2, 3 };    
            int[] lowerBounds = { 1, 10 };    
            Array racers = Array.CreateInstance(typeof(Person), lengths, lowerBounds);    
            racers.SetValue(new Person("a", "b"), 1, 10);    
            racers.SetValue(new Person("c", "d"), 1, 11);    
            racers.SetValue(new Person("e", "f"), 1, 12);    
            racers.SetValue(new Person("g", "h"), 2, 10);    
            racers.SetValue(new Person("i", "j"), 2, 11);    
            racers.SetValue(new Person("k", "l"), 2, 12);    
            Person[,] racers1 = (Person[,])racers;    
            Person first = racers1[1, 10];    
        }    
    }    
    public class Person    
    {    
        public Person()    
        { }    
        public Person(string firstName, string lastName)    
        {    
            this.FirstName = firstName;    
            LastName = lastName;    
        }    
        public string FirstName    
        {    
            get;    
            set;    
        }    
        public string LastName    
        {    
            get;    
            set;    
        }    
        public override string ToString()    
        {    
            return String.Format("{0} {1}", FirstName, LastName);    
        }    
    }    
}

Kopieren Sie das Array

1) Wenn die Elemente des Arrays Werttypen sind, werden alle Werte kopiert

int[] intArray1 = { 1, 2 };    
// 如果删掉 “(int[])” 会有 Error “Cannot implicitly convert type ‘object’ to &#39;int[]&#39;”    
int[] intArray2 = (int[]) intArray1.Clone

Benutzerdefinierte C#-Typ-Arrays und Array-Klasse

Wenn das Array Referenztypen enthält, werden die Elemente nicht kopiert, sondern nur die Referenzen werden kopiert

Wenn Sie beatlesClone ändern Das Attribut eines Elements ändert das entsprechende Objekt in beatles.

Person[] beatles = { new Person("John", "Lennon"), new Person("Paul", "McCartney") };    
Person[] beatlesClone = (Person[])beatles.Clone();

Benutzerdefinierte C#-Typ-Arrays und Array-Klasse


Weitere Artikel zu benutzerdefinierten C#-Typ-Arrays und Array-Klassen finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn