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

对一个新实例进行常规类型化可以实现什么?

  •  6
  • Dan  · 技术社区  · 14 年前

    我注意到有人在c-注意新的(

    public class MyClass<T> where T: new(){
    
    //etc
    
    }
    

    这能实现什么?

    3 回复  |  直到 13 年前
        1
  •  10
  •   JaredPar    14 年前

    这将约束泛型 MyClass<T> 只与 T 具有可用的无参数构造函数的实例。这允许您在类型中安全地使用以下表达式

    new T()
    

    没有 new 约束这是不允许的,因为clr无法验证类型 T 有一个适用的构造函数。

        2
  •  4
  •   Michael Goldshteyn    14 年前

    这意味着t必须有一个公共的无参数构造函数。例如(在msdn之外),必须可以创建以下新的t对象:

    class ItemFactory<T> where T : new()
    {
        public T GetNewItem()
        {
            return new T();
        }
    }
    

    有关更多信息,请参阅 new constraint 在MSDN中。

        3
  •  1
  •   henginy    14 年前

    它允许您键入:

    T obj = new T();
    

    如果没有 new() 条款。