程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#泛型介紹(3)

C#泛型介紹(3)

編輯:關於C語言
型的Where

泛型的Where能夠對類型參數作出限定。有以下幾種方式。

·where T : struct 限制類型參數T必須繼承自System.ValueType。

·where T : class 限制類型參數T必須是引用類型,也就是不能繼承自System.ValueType。

·where T : new() 限制類型參數T必須有一個缺省的構造函數

·where T : NameOfClass 限制類型參數T必須繼承自某個類或實現某個接口。

以上這些限定可以組合使用,比如: public class Point<T> where T : class, IComparable, new()

泛型的機制

·機制:

C#泛型代碼在被編譯為IL代碼和無數據時,采用特殊的占位符來表示泛型類型,並用專有的IL指令支持泛型操作。而真正的泛型實例化工作以"on-demand"的方式,發生在JIT編譯時。

·編譯機制:

1. 第一輪編譯時,編譯器只為Stack<T>(棧算法)類型產生“泛型版”的IL代碼與元數據-----並不進行泛型類型的實例化,T在中間只充當占位符

2. JIT編譯時,當JIT編譯器第一次遇到Stack<int>時,將用int替換“泛型版”IL代碼與元數據中的T---進行泛型類型的實例化。CLR為所有類型參數為“引用類型”的泛型類型產生同一份代碼;但如果類型參數為“值類型”,對每一個不同的“值類型”,CLR將為其產生一份獨立的代碼。

泛型的一些問題

·不支持操作符重載。我只知道這麼多了

范型的意義

泛型的意義何在?類型安全和減少裝箱、拆箱並不是泛型的意義,而是泛型帶來的兩個好處而已(或許在.Net泛型中,這是最明顯的好處了)。泛型的意義在於——把類型作為參數,它實現了代碼之間的很好的橫向聯系,我們知道繼承為代碼提供了一種從上往下的縱向聯系,但泛型提供了方便的橫向聯系(從某種程度上說,它和AOP在思想上有相通之處)。在PersonCollection例子中,我們知道Add()方法和Remove()方法的參數類型相同,但我們明確無法告訴我們的程序這一點,泛型提供了一種機制,讓程序知道這些。道理雖然簡單,但這樣的機制或許能給我們的程序帶來一些深遠的變化吧。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved