where(泛型類型約束)

   通過使用泛型,可以創建類、接口和方法,它們以一種類型安全的工作方式操作各種數據。本質上,術語“泛型”指的是“參數化類型”(parameterized types)。參數化類型非常重要,因爲它們可以在創建類、接口、方法和委託的時候將要操作的數據類型作爲參數進行指定。
通過泛型,可以創建一個類,使其自動處理不同類型的數據。使用參數化類型的類、接口、方法和委託都可以稱爲“泛型”。

   今天在瀏覽代碼的時候看到關於where(泛型類型約束),以前沒有看過這種寫法,就查了查做了一下整理,下面和大家分享一下。

其中,where T:參數類型約束,在.net中支持五種類型的約束:

where T : struct | T必須是一個結構類型;
where T : class T必須是一個類(class)類型;
where T : new() | T必須要有一個無參構造函數;
where T : NameOfBaseClass | T必須繼承名爲NameOfBaseClass類;
where T : NameOfInterface | T必須實現名爲NameOfInterface接口;

詳細的可參考MSDN:http://msdn.microsoft.com/zh-cn/library/bb384067.aspx

其中,在開發這塊看了一下,用where T:new()比較多,自己也搜索了一些相關資料,整理了一下:

new()構造函數約束允許開發人員實例化一個泛型類型的對象。一般情況下,我們無法創建一個泛型類型參數的實例。然而,new()約束改變了這種情況,他要求類型參數必須提供一個無參數的構造函數。在使用new()約束時,可以通過調用該無參構造函數來創建對象。

使用new()約束時應注意兩點:

(1)它可以與其他約束一起使用,但是必須位於約束列表的末端。

(2)new()僅允許開發人員使用無參構造函數來構造一個對象,即使同時存在其他的構造函數。換句話說,不允許給類型參數的構造函數傳遞實參。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章