C# 3.0 作為 .NET Framework 3.5 的核心語言更新,引入了多項革命性的語法特性,極大地提升了開發效率與代碼可讀性。本文將深入探討其中兩項基石級改進:隱式類型區域變量(var 關鍵字)與擴展方法,並通過實戰代碼示例展示其威力。
C# 3.0 引入 var 關鍵字,允許開發者在聲明區域變量時省略顯式類型聲明,由編譯器根據初始化表達式自動推斷類型。這並非動態類型或弱類型,而是靜態強類型推斷,編譯期即確定具體類型,運行期零開銷。
var myData = "This is my data"; // 推斷為 string
var count = 42; // 推斷為 int
var now = DateTime.Now; // 推斷為 DateTime
var customer = new Customer(); // 推斷為 Customer
var dict = new Dictionary<string, List<int>>(); 遠比顯式聲明簡潔。var 是唯一可行的聲明方式。var x = null; 會導致編譯錯誤,因無法從 null 推斷具體類型。// 錯誤示例
var data = "hello";
data = 123; // 編譯錯誤:無法將 int 隱式轉換為 string
擴展方法允許開發者在不修改原類型源碼、不創建派生類的前提下,為任意類型(包括密封類、介面、結構體、第三方庫類型)添加實例方法語法的調用方式。本質上是編譯器語法糖,將實例調用轉譯為靜態方法調用。
this 修飾符,指定被擴展的類型。using 引入包含擴展方法的命名空間)。namespace MyExtensions
{
public static class StringExtensions
{
public static string RemoveSpaces(this string input)
{
return input?.Replace(" ", "") ?? string.Empty;
}
}
}
// 使用
using MyExtensions;
var text = "C # 3 . 0";
var clean = text.RemoveSpaces(); // 調用如同實例方法
Console.WriteLine(clean); // 輸出: C#3.0
擴展方法對 IEnumerable<T> 的擴展奠定了 LINQ 的基礎。自定義擴展同樣支持鏈式風格:
public static class IntExtensions
{
public static int Double(this int value) => value * 2;
public static int Square(this int value) => value * value;
}
var result = 5.Double().Square(); // (5*2)^2 = 100
using 的命名空間勝出。var 與擴展方法是 C# 3.0 語法現代化的雙引擎:前者簡化類型聲明、支撐匿名類型;後者打破類型封閉性、實現開放封閉原則。兩者結合,為後續的 Lambda 表達式、LINQ 查詢表達式鋪平了道路。善用這兩特性,能讓代碼更簡潔、更具表達力、更易維護。