型別約束(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’

具有引數的建構函式沒有約束,僅支援無引數建構函式。