代码之家  ›  专栏  ›  技术社区  ›  synergetic

new()是什么意思?

  •  13
  • synergetic  · 技术社区  · 15 年前

    有一个 AuthenticationBase WCF RIA服务中的类。类定义如下:

    // assume using System.ServiceModel.DomainServices.Server.ApplicationServices
    
    public abstract class AuthenticationBase<T> 
        : DomainService, IAuthentication<T> 
        where T : IUser, new()
    

    做什么 new() 这段代码的意思是?

    3 回复  |  直到 14 年前
        1
  •  21
  •   Frédéric Hamidi    13 年前

    是那个 new constraint .

    它规定 T 一定不是 abstract 必须揭露 public 无参数 constructor 以便用作 generic type argument 对于 AuthenticationBase<T> 上课。

        2
  •  7
  •   AK.    15 年前

    使用new()关键字需要为所述类定义默认构造函数。如果没有关键字,尝试类new()将无法编译。

    例如,以下代码段将无法编译。函数将尝试返回参数的新实例。

    public T Foo <T> ()
    // Compile error without the next line
    // where T: new()
    {
        T newInstance = new T();
        return newInstance;
    }
    

    这是泛型类型约束。看这个 MSDN article .

        3
  •  5
  •   cdhowie    15 年前

    这意味着用于填充泛型参数的类型 T 必须有一个公共的无参数构造函数。如果类型没有实现这样的构造函数,这将导致编译时错误。

    如果 new() 应用了泛型约束,如本例中所示,它允许类或方法 AuthenticationBase<T> 在本例中为类)调用 new T(); 构造指定类型的新实例。没有其他方法,除了反射(这包括使用 System.Activator ,以构造泛型类型的新对象。

    推荐文章