標籤:style ar io 使用 sp strong on 資料 div
1.意義
泛型(generic)是C#語言2.0和通用語言運行時(CLR)的一個新特性。泛型為.NET架構引入了型別參數(type parameters)的概念。型別參數使得設計類和方法時,不必確定一個或多個具體參數,其的具體參數可延遲到客戶代碼中聲明、實現。這意味著使用泛型的型別參數T,寫一個類MyList<T>,客戶代碼可以這樣調用:MyList<int>, MyList<string>或 MyList<MyClass>。這避免了運行時類型轉換或裝箱操作的代價和風險。C# 泛型是開發工具庫中的一個無價之寶。它們可以提高效能、型別安全和品質,減少重複性的編程任務,簡化總體編程模型,而這一切都是通過優雅的、可讀性強的文法完成的。儘管 C# 泛型的根基是 C++ 範本,但 C# 通過提供編譯時間安全和支援將泛型提高到了一個新水平。C# 利用了兩階段編譯、中繼資料以及諸如約束和一般方法之類的創新性的概念。毫無疑問,C# 的將來版本將繼續發展泛型,以便添加新的功能,並且將泛型擴充到諸如資料訪問或本地化之類的其他 .NET Framework 領域 2.泛型約束 下表列出了五類約束:
| 約束 |
描述 |
| where T: struct |
型別參數必須為實值型別。 |
| where T : class |
型別參數必須為類型。 |
| where T : new() |
型別參數必須有一個公有、無參的建構函式。當於其它約束聯合使用時,new()約束必須放在最後。 |
| where T : <base class name> |
型別參數必須是指定的基底類型或是派生自指定的基底類型。 |
| where T : <interface name> |
型別參數必須是指定的介面或是指定介面的實現。可以指定多個介面約束。介面約束也可以是泛型的。 |
型別參數的約束,增加了可調用的操作和方法的數量。這些操作和方法受約束類型及其派生層次中的類型的支援。因此,設計泛型類或方法時,如果對泛型成員執行任何賦值以外的操作,或者是調用System.Object中所沒有的方法,就需要在型別參數上使用約束。3.泛型類泛型類封裝了不針對任何特定資料類型的操作。泛型類常用於容器類,如鏈表、雜湊表、棧、隊列、樹等等。這些類中的操作,如對容器添加、刪除元素,不論所儲存的資料是何種類型,都執行幾乎同樣的操作。 對大多數情況,推薦使用.NET架構2.0類庫中所提供的容器類。有關使用這些類的詳細資料,請參見基礎類庫中的泛型。 通常,從一個已有的具體類來建立泛型類,並每次把一個類型改為型別參數,直至達到一般性和可用性的最佳平衡。當建立你自己的泛型類時,需要重點考慮的事項有: 哪些類型應泛化為型別參數。一般的規律是,用參數表示的類型越多,代碼的靈活性和複用性也就越大。過多的泛化會導致代碼難以被其它的開發人員理解。 如果有約束,那麼型別參數需要什麼樣約束。一個良好的習慣是,儘可能使用最大的約束,同時保證可以處理所有需要處理的類型。例如,如果你知道你的泛型類只打算使用參考型別,那麼就應用這個類的約束。這樣可以防止無意中使用實值型別,同時可以對T使用as運算子,並且檢查Null 參考。 把泛型行為放在基類中還是子類中。泛型類可以做基類。同樣非泛型類的設計中也應考慮這一點。泛型基類的繼承規則 。 是否實現一個或多個泛型介面。例如,要設計一個在基於泛型的容器中建立元素的類,可能需要實作類別似IComparable<T>的介面,其中T是該類的參數。4.內容用得比較多的就是dictionary與list ...
11.泛型篇