代碼
PublicClassGeneric(OfT)
PublicFieldAsT
EndClass
C#代碼
publicclassGeneric
{
publicTField;
}
C++代碼
genericpublicrefclassGeneric
{
public:
TField;
};
在創建泛型類的實例時,會指定實際類型來替換類型參數。這會建立一個新的泛型類,稱為構造泛型類,選定的類型将替換所有出現的類型參數。最後得到按照您選擇的類型定制的類型安全的類,如下面的代碼所示。
VisualBasic代碼
DimgAsNewGeneric(OfString)
g.Field="Astring"
C#代碼
Genericg=newGeneric();
g.Field="Astring";
C++代碼
Generic^g=gcnewGeneric();
g->Field="Astring";
解釋
下面的術語用于讨論.NETFramework中的泛型:
“泛型類型定義”是用作模闆的類、結構或接口聲明,其中具有該類、結構或接口聲明可以包含或使用的類型的占位符。例如,Dictionary類可以包含兩種類型:鍵和值。因為它隻是一個模闆,您不能創建作為泛型類型定義的類、結構或接口的實例。
“泛型類型參數”或稱“類型參數”是泛型類型或方法定義中的占位符。Dictionary泛型類型具有兩個類型參數:TKey和TValue,分别表示其鍵和值的類型。
所有泛型方法聲明都有一個類型參數聲明部分(由尖括号分隔),該類型參數聲明部分在方法返回類型之前(在下面例子中的)。每一個類型參數聲明部分包含一個或多個類型參數,參數間用逗号隔開。一個泛型參數,也被稱為一個類型變量,是用于指定一個泛型類型名稱的标識符。類型參數能被用來聲明返回值類型,并且能作為泛型方法得到的實際參數類型的占位符。n泛型方法方法體的聲明和其他方法一樣。注意類型參數隻能代表引用型類型,不能是原始類型(像 int,double,char 的等)。
“構造泛型類型”或稱“構造類型”是為泛型類型定義的泛型類型參數指定類型得到的結果。
“泛型類型參數”是替換泛型類型參數的任何類型。
一般術語“泛型類型”包括構造類型和泛型類型定義。
“約束”是加在泛型類型參數上的限制。例如,可以将類型參數限制為實現IComparer泛型接口的類型以确保可以對該類型的實例進行排序。還可以将類型參數限制為具有特定基類的類型、具有默認構造函數的類型或是引用類型或值類型。泛型類型的用戶不能替換不滿足這些約束的類型參數。
“泛型方法定義”是具有兩個參數列表的方法:一個泛型類型參數列表和一個形參列表。類型參數可以作為返回類型或形參的類型出現,如下面的代碼所示。
VisualBasic代碼
FunctionGeneric(OfT)(ByValargAsT)AsT
DimtempAsT=arg
...
EndFunction
C#代碼
TGeneric(Targ){Ttemp=arg;...}
C++代碼
genericTGeneric(Targ){Ttemp=arg;...};
泛型方法可以出現在泛型或非泛型類型上。需要注意的是,并不是隻要方法屬于泛型類型,或者甚至是方法的形參的類型是封閉類型的泛型參數,就可以說方法是泛型方法。隻有當方法具有它自己的類型參數列表時,才能稱其為泛型方法。在下面的代碼中,隻有方法G是泛型方法。
VisualBasic代碼
ClassA
FunctionG(OfT)(ByValargAsT)AsT
...
EndFunction
EndClass
ClassGeneric(OfT)
FunctionM(ByValargAsT)AsT
...
EndFunction
EndClass
C#代碼
classA
{
TG(Targ){...}
}
classGeneric
{
TM(Targ){...}
}
C++代碼
refclassA
{
genericTG(Targ){...};
};
genericrefclassGeneric
{
TM(Targ){...};
};
VisualC++、C#和VisualBasic都提供了對定義和使用泛型的完全支持。有關更多信息,請參見VisualBasic中的泛型類型、泛型介紹(C#編程指南)和OverviewofGenericsinC++。
嵌套類型和泛型
嵌套于泛型類型中的類型依賴于封閉泛型類型的類型參數,公共語言運行庫将這樣的嵌套類型視為泛型,即使它們沒有自己的泛型類型參數。在創建嵌套類型的實例時,需要為所有封閉泛型類型指定類型參數。



















