类型约束(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’
具有参数的构造函数没有约束,仅支持无参数构造函数。