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

C# 2.0 泛型完整技術規範:泛型方法、匿名方法、迭代器與部分型別

     編輯:關於C語言

泛型方法

型別參數僅在特定方法需要時宣告於方法名稱後:

void PushMultiple<T>(Stack<T> stack, params T[] values) {
    foreach (T v in values) stack.Push(v);
}

// 呼叫:型別推斷自動解析 T
Stack<int> s = new Stack<int>();
PushMultiple(s, 1, 2, 3);  // 等同 PushMultiple<int>(s, 1, 2, 3)

推斷規則:從實參型別反推型別參數,支援多態、介面、委派等複雜情境。

匿名方法詳細規範

語法

delegate (parameters) { statements }

隱式轉換相容性規則

  • 參數清單相容:
    1. 匿名方法無參數清單,且委派無 out 參數
    2. 參數清單在數量、型別、修飾詞上完全匹配
  • 回傳型別相容:
    1. 委派回傳 void,匿名方法無 return 或僅 return;
    2. 委派回傳非 void,所有 return expr 可隱式轉換至委派型別

外部變數捕獲機制

  • 匿名方法引用的區域變數/參數稱為外部變數
  • 被引用的外部變數稱為被捕獲變數
  • 生命週期延長:直到引用該匿名方法的委派可被 GC 為止
  • 編譯器實作:提升為封裝類別實例欄位

委派實例相等性

  • 語義相同且捕獲相同外部變數集合 → 可能 相等
  • 語義不同或捕獲集合不同 → 絕不 相等

方法群組轉換

允許直接以方法群組賦值給委派:

btn.Click += Handler;  // 等同 new EventHandler(Handler)
Apply(data, Math.Sin);   // 等同 new Function(Math.Sin)

編譯器自動推斷目標委派型別並建立實例。影響多載解析,不參與型別推斷。

迭代器

核心概念

  • yield return 產生序列下一值
  • yield break 終止序列
  • 回傳型別須為 IEnumerator/IEnumerable 或泛型版本

實作範例:Stack 列舉器

public IEnumerator<T> GetEnumerator() {
    for (int i = count - 1; i >= 0; --i)
        yield return items[i];
}

多重列舉模式

public IEnumerable<T> TopToBottom { 
    get { return this; }  // 自身即可列舉
}
public IEnumerable<T> BottomToTop {
    get {
        for (int i = 0; i < count; i++)
            yield return items[i];
    }
}

獨立列舉器保證

IEnumerable<int> e = FromTo(1, 10);
foreach (int x in e) {
    foreach (int y in e) {  // 巢狀列舉,各自獨立
        Console.Write(x * y);
    }
}

每次 GetEnumerator 產生新列舉器,擁有參數獨立拷貝,互不干擾。

部分型別

public partial class Customer { ... }  // File1
public partial class Customer { ... }  // File2
// 編譯合併
  • 關鍵字 partial 緊鄰 class/struct/interface
  • 所有部分同命名空間、同組件編譯
  • 不可跨組件擴充已編譯型別
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved