C# 對象集合初始化

一、自動實現的屬性

    public class Person
    {
        // C# 3之前我們定義屬性時,一般會像下面這樣去定義
        // 首先會先定義私有字段,再定義屬性來對字段進行訪問
        //private string _name;
        //public string Name
        //{
        //    get { return _name; }
        //    set { _name = value; }
        //}

        // C# 3之後有自動實現的屬性之後
        // 對於不需要額外驗證的屬性,就可以用自動實現的屬性對屬性的定義進行簡化
        // 不再需要額外定義一個私有字段了,
        // 不定義私有字段並不是此時沒有了私有字段,只是編譯器幫我們生成一個匿名的私有字段,不需要我們在代碼中寫出
        // 減少我們書寫的代碼
        // 下面就是用自動實現的屬性來定義的一個屬性,其效果等效於上面屬性的定義,不過比之前更加簡潔了

        /// <summary>
        ///  姓名
        /// </summary>
        public string Name { get; set; }
    }

二、對象初始化

    class Program
    {
        static void Main(string[] args)
        {
            Person person1 = new Person();
            person1.Name = "learning hard";
            person1.Age = 25;
            Person person2 = new Person("learning hard");
            person2.Age = 25;
            // 如果類沒有無參的構造函數就會出現編譯時錯誤
            // 因爲下面的語句是調用無參構造函數來對類中的字段進行初始化的
            // 大括號部分就是對象初始化程序
            Person person3 = new Person { Name = "learning hard", Age = 25 };
            // 下面代碼和上面代碼是等價的,只不過上面省略了構造函數的圓括號而已
            Person person4 = new Person() { Name = "learning hard", Age = 25 };
            Person person5 = new Person("learning hard") { Age = 25 };
        }
    }

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public Person()
        {
        }

        public Person(string name)
        {
            this.Name = name;
        }
    }

三、集合初始化

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            // C# 3.0之前初始化集合使用的代碼
            List<string> names = new List<string>();
            names.Add("learning hard1");
            names.Add("learning hard2");
            names.Add("learning hard3");

            // 有了C# 3.0中集合初始化特性之後,就可以簡化代碼
            // 同時下面也使用了隱式類型(使用了var關鍵字)
            var newnames = new List<string>
            {
                "learning hard1","learning hard2", "learning hard3"
            };
        }
    }

    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public Person()
        {
        }

        public Person(string name)
        {
            this.Name = name;
        }
    }
}

四、匿名類型

    class Program
    {
        static void Main(string[] args)
        {
            // 定義匿名類型
            // 因爲這裏不知道初始化的類型是什麼,所以這裏就必須使用隱式類型
            // 此時隱式類型就發揮出了功不可沒的作用,從而說明隱式類型的提出是爲了服務於匿名類型的
            // 而匿名類型的提出又是服務於Linq,一步步都是在微軟團隊的計劃當中
            Console.WriteLine("進入匿名類型使用演示:");
            var person1 = new { Name = "learning hard", Age = 25 };
            Console.WriteLine("{0} 年齡爲: {1}", person1.Name, person1.Age);

            // 定義匿名類型數組
            var personcollection = new[]
            {
                new {Name ="Tom",Age=30},
                new {Name ="Lily", Age=22},
                new {Name ="Jerry",Age =32},

                // 如果加入下面一句就會出現編譯時錯誤
                // 因爲此時編譯器就不能推斷出要轉換爲什麼類型
                // new {Name ="learning hard"}
            };

            int totalAge = 0;
            foreach (var person in personcollection)
            {
                // 下面代碼證明Age屬性是強類型的int類型
                totalAge += person.Age;
            }
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章