C# 2.0 (Visual Studio 2005) 引入四大核心特性,極大提升開發效率與型別安全性,奠定現代 C# 程式設計基礎。
// C# 1.0 傳統寫法
button.Click += new EventHandler(Button_Click);
void Button_Click(object sender, EventArgs e) { MessageBox.Show("Hi"); }
// C# 2.0 匿名方法
button.Click += delegate { MessageBox.Show("Hi"); };
// 或直接指定方法群組(方法群組轉換)
button.Click += Button_Click;
out 參數;或雙方參數數量、型別、順序完全一致return 或 return;;雙方皆有回傳值時,匿名方法回傳型別可隱式轉換為委派定義型別public void Method(bool enabled)
{
string text = "Hello";
button.Click += delegate
{
button.Enabled = enabled; // 捕獲參數 enabled
button.Text = text; // 捕獲區域變數 text
};
}
區域變數/參數若被匿名方法引用,成為「外部變數/捕獲變數」,生命週期延長至委派被回收為止。編譯器自動生成封裝類別實現閉包。
文章僅提及請參考 MSDN。核心價值:型別安全的程式碼重用,消除裝箱/拆箱與執行期型別轉換錯誤。List<T>、Dictionary<TKey, TValue> 等集合類別效能大幅提升。
yield return 簡化 IEnumerable 實作IEnumerator需建立狀態機類別追蹤位置、實作 MoveNext、Current、Reset,極易出錯。
public IEnumerator GetEnumerator()
{
for (int i = 0; i < 10; i++)
yield return i; // 產生下一個值,保留執行狀態
}
public IEnumerable MaxToMin(int min, int max) // 命名迭代器,可帶參數
{
for (int i = max; i >= min; i--)
yield return i;
}
public IEnumerable MinToMax // 迭代器屬性
{
get { yield return this; } // this 實作 IEnumerable
}
yield break 宣告迭代結束。編譯器自動生成狀態機類別,開發者專注業務邏輯。
[modifiers] partial class MyClass { ... } // 可分散在多個 .cs 檔案
適用場景:設計師生成碼與手寫碼分離、多人同時修改同一類別、巨大類別模組化拆分。編譯時合併為單一型別。