上一篇我們介紹了C# 3.0新語言特性和改進上部分,這篇我們繼續介紹剩下 的部分。
C# 3.0新語言特性和改進包括:
自動屬性(Auto- Implemented Properties)
隱含類型局部變量(Local Variable Type Inference)
匿名類型(Anonymous Types)
對象與集合初始化器 (Object and Collection Initializers)
擴展方法(Extension Methods)
Lambda表達式和Lambda表達式樹 (Lambda Expression and Lambda Expression Trees)
擴展方法(Extension Methods)
往往我們 需要對CLR類型進行一些操作,但苦於無法擴展CLR類型的方法,只能創建一些 helper方法,或者繼承類。我們來修改上面的User類:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Read()
{
return "Id:" + Id + "姓名:" + Name + "年齡:" + Age;
}
}
然後調用
var user = new { Id = 1, Name = "YJingLee", Age = 22 };
var str = user.Read();
現在有了擴展方法就方便多了。
擴展方法允許 開發人員往一個現有的CLR類型的公開契約(contract)中添加新的方法,而不用 生成子類或者重新編譯原來的類型。擴展方法有助於把今天動態語言中流行的對 duck typing的支持之靈活性,與強類型語言之性能和編譯時驗證融合起來。——引用Scott博文
擴展方法是可以通過使用實例方法語法調 用的靜態方法。效果上,使得附加的方法擴展已存在類型和構造類型成為可能。他可以對現有類功能進行擴充,從而使該類型的實例具有更多的方法(功能)。
擴展方法允許我們在不改變源代碼的情況下擴展(即添加不能修改)現 有類型中的實例方法。