方法声明结束时的new()关键字

时间:2016-01-15 13:59:44

标签: c# syntax new-operator keyword method-declaration

一位同事给了我一些我必须在.NET应用程序中使用的C#类 有一个我从未见过的拼写错误,我在互联网上找不到任何解释......

以下是代码:

public void GoTo<TView>() where TView : Form, new()
{
    var view = Activator.CreateInstance<TView>();

    //si on vient de creer une startup view alors on affiche l'ancienne
    //la reference a la nouvelle sera detruite en sortant de la fonction GoTo
    if (view is StartupForm)
    {
        ShowView(_StartupForm);
    }
    else ShowView(view);

}

方法声明结尾处的new()关键字是什么?

3 个答案:

答案 0 :(得分:11)

type parameter constraint。从字面上看,它意味着TView必须具有公共无参数构造函数。

答案 1 :(得分:8)

请参阅MSDN

  

新约束指定泛型类中的任何类型参数   声明必须具有公共无参数构造函数。要使用   新约束,类型不能是抽象的。

所以当你说:

void myMethod<T>(T item) where T : class, new();

然后它意味着你在泛型参数T上设置一个约束。所以T应该是一个引用类型,不能是一个值类型( int,float,double etc )。 T也应该有一个无公共参数的默认构造函数。

答案 2 :(得分:0)

这是一个类型参数约束,特别是 constuctor-constraint ,详见C#语言规范的第10.1.5节。

  

如果类型参数的where子句包含构造函数约束(其形式为new()),则为   可以使用new运算符创建该类型的实例(第7.6.10.1节)。用于类型的任何类型参数   具有构造函数约束的参数必须具有公共无参数构造函数(隐式地使用此构造函数)   存在任何值类型)或者是具有值类型约束或构造函数约束的类型参数(请参阅   §10.1.5了解详情。

这只是一种保证传入的类型可以使用无参数构造函数构造的方法。