// 實例語法(推薦)
s.ExtFunc();
// 靜態語法(編譯器實際生成形式)
SampleExtensions.ExtFunc(s);
// 兩者 IL 完全等價
public static class StringExtensions
{
public static int ToInt32(this string s) => int.Parse(s);
}
// 使用
string sval = "20";
Console.WriteLine(sval.ToInt32()); // 輸出 20
// String 原本無 ToInt32,擴展方法無縫增強
using 命名空間即導入該空間下所有靜態類的擴展方法。無需單獨導入類。
using 勝出
public class SampleClass { public void Func() => Console.WriteLine("實例"); }
public static class Ext { public static void Func(this SampleClass s) => Console.WriteLine("擴展"); }
new SampleClass().Func(); // 輸出:實例
// Ext.Func(new SampleClass()); // 顯式調用擴展方法
using 導入using 勝出方案 CSharp3Sample1 包含 4 個項目 Ex01~Ex04,對應各節示例。需 VS2005 + LINQ Preview 運行。
擴展方法雖為靜態方法語法糖,但其跨程序集擴展能力、最低優先級保護實例方法、命名空間導入機制構成了完整的生態系統。理解重載抉擇規則,能避免「擴展方法不生效」的困惑,自信構建流式 API。