一位同事给了我一些我必须在.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()
关键字是什么?
答案 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了解详情。
这只是一种保证传入的类型可以使用无参数构造函数构造的方法。