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

深入理解 C# 3.0 五大核心改進:var、擴充方法、物件初始化器、匿名型別、LINQ

     編輯:關於C語言

1. 隱含型別區域變數 var

var 讓編譯器依初始化運算式推斷型別,非動態型別,編譯期即確定。


var s = "Hello";        // string
var n = 42;             // int
var cust = new Customer(); // Customer
var data = GetData();   // 依 GetData 回傳型別推斷

優點

  • 減少重複輸入(Customer c = new Customer() → var c = new Customer())。
  • 配合匿名型別、LINQ 查詢結果型別複雜時極為方便。
  • 方法回傳型別變更時,呼叫端 var 可自動適應,減少維護。

限制

  • 必須在宣告時初始化。
  • 不可用於欄位、屬性、方法參數、回傳型別。
  • 一旦推斷完成,型別不可變(var x = 1; x = "str"; 編譯錯誤)。

2. 擴充方法

允許為現有型別(含密封類別、介面、實值型別)「新增」靜態方法,呼叫語法如同實例方法。

定義規則

  • 定義於 static 類別中。
  • 方法為 static,第一個參數加 this 修飾詞指明擴充目標型別。

namespace MyExtensions
{
    public static class StringExtensions
    {
        public static string NoSpaces(this string input)
            => input.Replace(" ", "");
    }
}

使用


using MyExtensions;
var s = "a b c".NoSpaces(); // "abc"

優先順序

實例方法優先於同簽名擴充方法;擴充方法僅在找不到實例方法時被考慮。


3. 物件初始化器

允許在 new 運算式中直接設定公開屬性/欄位,無需對應建構函式。


// 傳統:需多載建構函式
var c = new Customer("John", "Doe");

// C# 3.0:單一無參數建構函式即可
var c = new Customer { FirstName = "John", LastName = "Doe" };

// 巢狀初始化
var order = new Order {
    Customer = new Customer { Name = "John" },
    Items = { new Item { Price = 10 }, new Item { Price = 20 } }
};

優點

  • 減少建構函式多載爆炸。
  • 程式碼可讀性大增(屬性名稱自述意圖)。

4. 匿名型別

編譯器自動產生唯讀屬性的參考型別,型別名稱僅編譯器可見。


var point = new { X = 10, Y = 20 }; // 型別名稱如 <>f__AnonymousType0`2
Console.WriteLine(point.X); // 10

特性

  • 不可變(屬性唯讀)。
  • 同組件內、同屬性名稱/順序/型別的匿名型別實例共享同一個編譯器產生的型別,可互指派。
  • 常用於 LINQ select new { ... } 投射結果。

5. LINQ (Language Integrated Query)

統一查詢語法,直接在 C# 中對任意 IEnumerable<T> 資料源(記憶體集合、XML、資料庫透過 LINQ to SQL/Entities)進行查詢。

查詢語法範例


var q = from c in customers
        where c.OrderCount > 10
        orderby c.Id
        select c;

優勢

  • 語言整合:編譯期型別檢查、IntelliSense、重構支援,無 SQL 字串拼湊風險。
  • 自動映射:結果直接為強型別物件,免手寫 DataReader → Entity 對映。
  • 延遲執行:查詢定義與執行分離,利於組合與最佳化。

適用範圍

  • LINQ to Objects(記憶體集合)
  • LINQ to XML
  • LINQ to SQL / Entity Framework(資料庫)
  • 自訂 LINQ Provider

總結

C# 3.0 這五大特性相輔相成:var 與匿名型別簡化 LINQ 結果處理;擴充方法豐富 IEnumerable<T> 查詢運算子;物件初始化器簡化投射建構。共同構建了現代 C# 函數式、聲明式程式設計的基石。

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