構造器約束
class A
{
public A(){}
}
class B
{
public B(int i)()
}
class C
where T:new()
{
// 可以在其中使用T t = new T();
}
C c = new C(); // 可以,A有無參數構造器
C c = new C(); // 錯誤,B沒有無參數構造器
值類型/引用類型約束
public struct A{...}
public class B{...}
class C
where T : struct
{
// T在這裡面是一個值類型
}
C c = new C(); // 可以,A是一個值類型
C c = new C(); // 錯誤,B是一個引用類型
總結
C#的泛型能力有CLR在運行時支持,它既不同於c++在編譯時所支持的靜態模板,也不同於Java在編譯器層面使用"檫拭法"支持的簡單的類型.
C#的泛型支持包括類,結構,接口,委托共四種泛型類型,以及方法成員.
C#的泛型采用"基類,接口,構造器,值類型/引用類型"的約束方式來實現對類型參數的"顯式約束",它不支持C++模板那樣的基於簽名的顯式約束.