深入解析C# 4th 筆記(第一章)
阿新 • • 發佈:2020-12-20
目錄
型別系統-全能性助手
泛型(generic)
用C# 1 寫的程式碼如下
public class Bookshelf
{
public IEnumerable Books { get {...} }
}
Books這個型別中到底有些什麼,我們完全看不出來,因為型別系統無法告訴我們,但是在C# 2 中就容易看出來了
public class Bookshelf
{
public IEnumerable<Books> Books { get {...} }
}
可空值型別(nullable value type)
在C# 2 中引入,用來表示沒有定義的變數值。
readonly struct
在C# 7 中引入,用於將自定義結構體宣告為不可變型別
可空引用型別(nullable reference type)
在C# 8 中引入,C#8 中假設任何沒有顯式宣告為可空的值都為非可空值
匿名型別(anonymous type)和隱式區域性變數(var)
在C# 3 中引入,用於解決靜態型別語言的缺陷:程式碼冗餘
元組 (tuple)
在C# 7 中引入
程式碼更簡潔
構造和初始化
委託(delegate)的演化
button.Click += new EventHandler(Button_Click);//C#1 button.Click += Button_Click;//C#2 button.Click += delegate { MessageBox.Show("Test"); };//C#2 button.Click += (sender, e) => { MessageBox.Show("Test"); };//C#3
LINQ 的物件初始化器和集合初始化器
曾經是:
var customer = new Customer();
customer.Name = "Jon";
customer.Address = "UK";
var item1 = new OrderItem();
item1.ItemId = "abcd123";
item1.Quantity = 1;
var item2 = new OrderItem();
item2.ItemId = "fgh1456";
item2.Quantity = 2;
var order = new Order();
order.OrderId = "xyz";
order.Customer = customer;
order.Items.Add(item1);
order.Items.Add(item2);
在C# 3 中引入物件初始化器和集合初始化器後
var order = new Order
{
OrderId = "xyz",
Customer = new Customer { Name = "Jon", Address = "UK" },
Items =
{
new OrderItem { ItemId = "abcd123", Quantity = 1 },
new OrderItem { ItemId = "fgh1456", Quantity = 2 }
}
};
方法與屬性宣告
自動實現的屬性
在C# 3 中出現
出現前:
private int index;
public int Index
{
get { return index; }
set { index = value; }
}
出現後:
public int Index { get; set; }
表示式主體成員(expression-bodied member )
在C# 6中引入
例:封裝一個 string 集合類,該集合有 Count 和 GetEnumerator() 兩個成員
C# 6 前
public int Count { get { return list.Count; } }
public IEnumerator<string> GetEnumerator()
{
return list.GetEnumerator();
}
C# 6 中使用 = >
public int Count => list.Count;
public IEnumerator<string> GetEnumerator() => list.GetEnumerator();
字串處理
呼叫方資訊(caller information attribute)
在C# 5 中引入 通過這項特性,編譯器可以將方法名和檔名自動填充到引數值中
nameof 運算子
在C# 6 中引入 用於獲取變數、型別、方法或成員的名字
內插字串字面量(interpolated string literal)
在C# 6 中引入
LINQ
在C# 3 中引入 LINQ使用 表示式樹 來完成程序外資料的查詢操作
非同步
在C# 5 中引入了 async/await機制 簡化了非同步程式設計模式