型別約束(new-keyword)
通過使用 new()
約束,可以強制使用型別引數來定義空(預設)建構函式。
class Foo
{
public Foo () { }
}
class Bar
{
public Bar (string s) { ... }
}
class Factory<T>
where T : new()
{
public T Create()
{
return new T();
}
}
Foo f = new Factory<Foo>().Create(); // Valid.
Bar b = new Factory<Bar>().Create(); // Invalid, Bar does not define a default/empty constructor.
對 Create()
的第二次呼叫將給出編譯時錯誤,並顯示以下訊息:
‘Bar’必須是具有公共無引數建構函式的非抽象型別,以便在泛型型別或方法’Factory’中將其用作引數’T’
具有引數的建構函式沒有約束,僅支援無引數建構函式。