你能解释一下T: class, new()在下一行代码中是什么意思吗?

void Add<T>(T item) where T : class, new();

当前回答

“Where”后面的是对你声明的泛型类型T的约束,所以:

class意味着T应该是一个类,而不是值类型或结构。 new()表示T类应该定义一个没有公共形参的默认构造函数。

其他回答

它被称为泛型参数T上的“约束”。这意味着T必须是一个引用类型(一个类),并且它必须有一个公共默认构造函数。

“Where”后面的是对你声明的泛型类型T的约束,所以:

class意味着T应该是一个类,而不是值类型或结构。 new()表示T类应该定义一个没有公共形参的默认构造函数。

这是泛型机制的一部分,其中where关键字为必须实现的类型添加约束,以便用作类型参数。

new():指定new()约束意味着类型T必须使用无参数构造函数,因此可以从它实例化对象-请参阅默认构造函数。

class:意思是T必须是一个引用类型,所以它不能是int, float, double, DateTime或其他结构(值类型)。

public void MakeCars()
{
    //This won't compile as researchEngine doesn't have a public constructor and so can't be instantiated.
    CarFactory<ResearchEngine> researchLine = new CarFactory<ResearchEngine>();
    var researchEngine = researchLine.MakeEngine();

    //Can instantiate new object of class with default public constructor
    CarFactory<ProductionEngine> productionLine = new CarFactory<ProductionEngine>();
    var productionEngine = productionLine.MakeEngine();
}

public class ProductionEngine { }
public class ResearchEngine
{
    private ResearchEngine() { }
}

public class CarFactory<TEngine> where TEngine : class, new()
{
    public TEngine MakeEngine()
    {
        return new TEngine();
    }
}

where (c#参考)

new() Constraint让编译器知道提供的任何类型参数必须有一个可访问的无参数——或默认——构造函数

所以它应该是,T必须是一个类,并且有一个可访问的无参数构造函数,或者默认构造函数。