.NET 旗艦語言 C# 與 Visual Basic 各有獨特功能。本文聚焦 C# 3.0 (VS 2008/.NET 3.5) 引入的三大獨有特性:自動屬性、集合初始化器、多行 Lambda 運算式,展示其語法優勢與實務價值。
傳統屬性需手寫私有欄位與 get/set 邏輯,自動屬性讓編譯器自動產生幕後欄位。
// 傳統寫法
private int _x;
public int X
{
get { return _x; }
set { _x = value; }
}
// 自動屬性:一行搞定
public int X { get; set; }
// 存取修飾詞非對稱
public int X { get; private set; } // 唯讀對外,內部可寫
public int Y { private get; set; } // 唯寫對外(罕見)
以陣列初始化器語法,自動呼叫集合的 Add 方法。
// 傳統寫法
var list = new List();
list.Add("Alice");
list.Add("Bob");
list.Add("Charlie");
// 集合初始化器
var list = new List { "Alice", "Bob", "Charlie" };
// 擴充:物件初始化器結合
var people = new List
{
new Person { Name = "Alice", Age = 25 },
new Person { Name = "Bob", Age = 30 }
};
// 字典初始化器 (C# 6+)
var dict = new Dictionary
{
[1] = "One",
[2] = "Two"
};
IEnumerableAdd 方法(或 Add(TKey, TValue))VB 僅支援單行 Lambda,C# 支援完整陳述式區塊。
// C# 多行 Lambda
Func add = (x, y) =>
{
var sum = x + y;
Console.WriteLine($"Calculating: {x} + {y} = {sum}");
return sum;
};
// 事件處理器
button.Click += (sender, e) =>
{
Log("Button clicked");
UpdateUI();
SaveState();
};
// LINQ 查詢中使用
var result = numbers.Where(n =>
{
bool isPrime = IsPrime(n);
if (isPrime) Log($"Found prime: {n}");
return isPrime;
});
' VB 僅支援單行
Dim add = Function(x, y) x + y ' 無法包含陳述式、無法除錯中間步驟
// C# 9+ record + 初始化器 + 自動屬性
public record Person(string Name, int Age, string Email);
// 使用
var team = new List
{
new Person("Alice", 25, "alice@example.com"),
new Person("Bob", 30, "bob@example.com")
};
// 查詢
var adults = team.Where(p =>
{
bool isAdult = p.Age >= 18;
if (!isAdult) Log($"Minor: {p.Name}");
return isAdult;
});
| 版本 | 年份 | 關鍵特性 |
|---|---|---|
| C# 3.0 | 2007 | 自動屬性、集合初始化器、Lambda 運算式、LINQ |
| C# 6.0 | 2015 | 字典初始化器、nameof、null 條件運算子、字串插值 |
| C# 9.0 | 2020 | record 型別、init 存取子、頂層陳述式 |
| C# 12.0 | 2023 | 主建構函式、集合運算式 [1, 2, 3] |
自動屬性消除樣板碼、集合初始化器簡化資料建構、多行 Lambda 賦予函數式程式設計完整表達力。這三大 C# 獨有特性(引入時)奠定了 C# 作為現代、表達力豐富、開發效率高語言的地位。現代 C# 更進一步整合為 record、init、集合運算式等更強大組合。