首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 獨有特性解析:自動屬性、集合初始化器、多行 Lambda

     編輯:關於C語言

前言

.NET 旗艦語言 C# 與 Visual Basic 各有獨特功能。本文聚焦 C# 3.0 (VS 2008/.NET 3.5) 引入的三大獨有特性:自動屬性、集合初始化器、多行 Lambda 運算式,展示其語法優勢與實務價值。

特性 1:自動屬性

傳統屬性需手寫私有欄位與 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; }  // 唯寫對外(罕見)

優勢

  • 資料繫結相容:WPF/WinForms/ASP.NET 資料繫結機制要求屬性,欄位無法繫結
  • 封裝彈性:未來可隨時加入驗證邏輯、通知變更、延遲載入,介面不變
  • 除錯友善:中斷點可設在 get/set,欄位無法
  • 序列化相容:多數序列化器只處理屬性

特性 2:集合初始化器

以陣列初始化器語法,自動呼叫集合的 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"
};

適用條件

  • 型別實作 IEnumerable
  • 具有接受單一參數的 Add 方法(或 Add(TKey, TValue))

特性 3:多行 Lambda 運算式

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 限制

' 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.02007自動屬性、集合初始化器、Lambda 運算式、LINQ
C# 6.02015字典初始化器、nameof、null 條件運算子、字串插值
C# 9.02020record 型別、init 存取子、頂層陳述式
C# 12.02023主建構函式、集合運算式 [1, 2, 3]

總結

自動屬性消除樣板碼、集合初始化器簡化資料建構、多行 Lambda 賦予函數式程式設計完整表達力。這三大 C# 獨有特性(引入時)奠定了 C# 作為現代、表達力豐富、開發效率高語言的地位。現代 C# 更進一步整合為 record、init、集合運算式等更強大組合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved