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

C# 3.0 語言核心增強:隱式型別、初始化器、匿名類型與擴充方法

     編輯:關於C#

C# 3.0 的四大核心語言增強——隱式型別區域變數(var)、物件/集合初始化器、匿名類型、擴充方法——不僅大幅提升編寫效率,更為 LINQ 查詢表達式、Lambda 表達式與運算式樹奠定了不可或缺的語法基礎。本文系統整合這四大特性的語法規則、編譯行為、相互關聯與最佳實踐。

1. 隱式型別區域變數


var i = 5;              // int
var s = "Hello";        // string
var arr = new[] { 1, 2, 3 }; // int[]
var anon = new { X = 1, Y = 2 }; // 匿名類型

核心規則: 僅限區域變數、必須初始化、不可為 null、推斷結果為強型別且不可變。隱式型別陣列 new[] 要求所有元素可隱式轉換至單一型別。

2. 物件與集合初始化器

物件初始化器


var book = new Book { Title = "C# in Depth", Price = 45.9m, Author = new Author { Name = "Jon Skeet" } };
  • 呼叫建構函式後依序指派屬性
  • 可指定建構函式引數:new Book("ISBN") { Price = 10 }
  • 支援巢狀物件/集合初始化

集合初始化器


var list = new List<int> { 1, 2, 3 };
var dict = new Dictionary<string, int> { { "A", 1 }, { "B", 2 } }; // 注意雙大括號
  • 需實作 ICollection<T>
  • 編譯器產生逐一 Add 呼叫

3. 匿名類型


var p1 = new { Name = "A", Price = 3 };
var p2 = new { Name = "B", Price = 4 }; // 同型別
var p3 = new { Price = 3, Name = "A" }; // 不同型別(順序不同)

關鍵特性:

  • 編譯期產生唯讀屬性類別,覆寫 Equals/GetHashCode/ToString
  • 同組件內結構相同(名稱、型別、順序)重用型別
  • 不可跨組件、不可作為公用 API 型別

4. 擴充方法


public static class StringExtensions
{
    public static bool IsValidEmail(this string s)
    {
        return Regex.IsMatch(s, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
    }
}

// 使用
"test@example.com".IsValidEmail(); // true

定義規則:

  • 定義於非泛型靜態類別
  • 方法為靜態
  • 第一個參數加 this 修飾,型別即為擴充目標

解析優先順序:

  1. 實例方法(最高)
  2. 最近命名空間的擴充方法
  3. 較遠命名空間的擴充方法(依 using 順序)

四大特性的相互關聯

C# 3.0 新建專案範本
特性為 LINQ 提供的基礎
var查詢結果型別往往為匿名類型或複雜泛型,必須隱式型別
物件/集合初始化器select new { ... } 投影語法基礎
匿名類型查詢投影結果型別、分組鍵型別
擴充方法標準查詢運算子(Where, Select, OrderBy...)實作機制

最佳實踐總結

  • var:型別明顯時使用,匿名類型/LINQ 結果必須使用
  • 初始化器:靜態資料、DTO 建構、測試資料優先使用
  • 匿名類型:僅限區域臨時使用,跨方法/組件改用 record/Tuple/具名類別
  • 擴充方法:擴充不可修改型別、提供流暢介面、實作標準查詢運算子
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved