类型约束(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’

具有参数的构造函数没有约束,仅支持无参数构造函数。