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