泛型類

泛型類

計算機語言定義
什麼是泛型,如何使用和定義泛型?泛型是具有占位符(類型參數)的類、結構、接口和方法,這些占位符是類、結構、接口和方法所存儲或使用的一個或多個類型的占位符。泛型集合類可以将類型參數用作它所存儲的對象的類型的占位符;類型參數作為其字段的類型和其方法的參數類型出現。泛型方法可以将其類型參數用作其返回值的類型或者其形參的類型之一。下面的代碼闡釋一個簡單的泛型類定義。
    中文名:泛型類 外文名: 适用領域: 所屬學科: 性質:Visual Basic 代碼 分類:占位符的類、結構、接口和方法 含義:泛型類定義

代碼

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++。

嵌套類型和泛型

嵌套于泛型類型中的類型依賴于封閉泛型類型的類型參數,公共語言運行庫将這樣的嵌套類型視為泛型,即使它們沒有自己的泛型類型參數。在創建嵌套類型的實例時,需要為所有封閉泛型類型指定類型參數。

上一篇:服務器系統

下一篇:直接故意

相關詞條

相關搜索

其它詞條