new()是什么意思?

15

在 WCF RIA Services 中有一个 AuthenticationBase 类。该类定义如下:

// assume using System.ServiceModel.DomainServices.Server.ApplicationServices

public abstract class AuthenticationBase<T> 
    : DomainService, IAuthentication<T> 
    where T : IUser, new()

在这段代码中,new() 是什么意思?
3个回答

23

2
微小的更正:一个类型必须具备这些特征才能用作通用类型“参数”。T是通用类型“参数”,但实际使用的类型(例如objectint)是类型参数。 - Jon Skeet

7
使用new()关键字需要为该类定义默认构造函数。如果没有该关键字,试图使用class new()将无法编译。
例如,以下代码片段将无法编译。该函数将尝试返回参数的新实例。
public T Foo <T> ()
// Compile error without the next line
// where T: new()
{
    T newInstance = new T();
    return newInstance;
}

这是一种通用类型约束。请参阅此MSDN文章


5
这意味着用于填充泛型参数 T 的类型必须有一个公共的且无参数的构造函数。如果该类型没有实现这样的构造函数,则会导致编译时错误。
如果应用了 new() 泛型约束,就像本例中一样,那么允许类或方法(在本例中为 AuthenticationBase<T> 类)调用 new T(); 来构造指定类型的新实例。除了使用反射(包括使用 System.Activator )外,没有其他方法可以构造泛型类型的新对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接