首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >new()在` `where :new()中做了什么?

new()在` `where :new()中做了什么?
EN

Stack Overflow用户
提问于 2009-07-06 04:35:02
回答 2查看 3.8K关注 0票数 14

new()在下面的代码中做了什么?

代码语言:javascript
运行
复制
public class A<T> where T : B, new()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-06 04:36:09

这是对类的泛型参数的约束,这意味着作为泛型类型传递的任何类型都必须具有无参数构造函数。

所以,

代码语言:javascript
运行
复制
public class C : B
{
    public C() {}
}

将是一个有效的类型。您可以创建一个新的A<C>实例。

然而,

代码语言:javascript
运行
复制
public class D : B
{
   public D(int something) {}
}

将不满足该约束,并且不允许您创建A<D>的新实例。如果您还向D添加了一个无参数构造函数,那么它将再次有效。

票数 36
EN

Stack Overflow用户

发布于 2009-07-06 11:03:00

new()约束意味着T必须有一个公共的无参数构造函数。对T()的任何调用都会转换为对Activator.CreateInstance()的各种重载的调用。一种更灵活的方法(例如,如果构造函数需要参数,或者是内部的而不是公共的)是使用委托:

代码语言:javascript
运行
复制
public class A<T> where T : B
{
    public void Method(Func<T> ctor)
    {
        T obj = ctor();
        // ....
    }
}

// elsewhere...
public class C : B
{
    public C(object obj) {}  
}

public void DoStuff()
{
    A<C> a = new A<C>();
    object ctorParam = new object();
    a.Method(() => new C(ctorParam));
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1085434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档