首頁  >  文章  >  後端開發  >  C# 自訂類型的陣列與 Array 類

C# 自訂類型的陣列與 Array 類

高洛峰
高洛峰原創
2016-12-16 14:27:504269瀏覽

自訂類型的陣列

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);    
        }    
    }    
}

注意:如果陣列中的元素是引用類型,就必須為每個陣列元素分配記憶體。

myPersons 是一個儲存在堆疊上的變量,該變數引用了儲存在託管堆上的 Person 元素數組。數組中的每一項都引用了一個 Person 物件。

C# 自訂類型的陣列與 Array 類

建立數組

用 [] 聲明數組是 C# 中使用 Array 類別的記號,在後台會建立一個派生於抽象基底類別 Array 的新類別。這樣就可以使用 Array 類別為每個 C# 陣列定義的方法和屬性了。

Array 類別是一個抽象類,所以不能用建構子來建立陣列。但除了可以使用 C# 語法建立陣列實例之外,還可以使用靜態方法 CreateInstance() 建立陣列(如果事先不知道元素的類型,就可以使用該靜態方法)。

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);    
        }    
    }    
}

用CreateInstance() 方法建立多維數組和不基於0 的數組:

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);    
        }    
    }    
}

複製數組

1) 如果數組的元素是值類型,就會複製所有的值

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

1) 如果數組的元素是值類型,就會複製所有的值C# 自訂類型的陣列與 Array 類

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

引用類型,則不複製元素,而只複製引用

如果修改beatlesClone 中的一個元素的屬性,就會改變beatles 中的對應物件。

rrreee

C# 自訂類型的陣列與 Array 類


更多C# 自訂類型的陣列與 Array 類相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn