一、自動實現的屬性
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; } } }