基类通用参数说明

时间:2016-10-19 01:33:24

标签: c#

我有一个像这样实现的Abstract类:

public abstract class BaseImplementation<T, U> : IHistory<T>
        where T : class, IEntity, new()
        where U : DbContext, new()

我理解通用参数<U>是EF DbContext。 我理解泛型参数<T>必须是实现IEntity接口的类。

什么是"new()"?必须是给定类的新实例?那是什么意思? 请注意,这是在<T><U>

中声明的

谢谢。

3 个答案:

答案 0 :(得分:3)

来自docs

“新约束指定泛型类声明中的任何类型参数必须具有公共无参数构造函数。要使用新约束,该类型不能是抽象的。”

我真的没有太多要补充的内容,因为我认为上面的解释已经足够了。

答案 1 :(得分:3)

new()被称为new constraint,它要求type参数具有公共的无参数构造函数。

使用它的好处是你可以在类中创建泛型类型的实例,而无需明确知道传入的类型。

例如:

public PersonEntity : IEntity
{
    // public parameterless constructor
    public PersonEntity()
    {
    }
}

public abstract class BaseImplementation<T, U> : IHistory<T>
    where T : class, IEntity, new()
    where U : DbContext, new()
{
    public T CreateEntity() 
    {
        var entity = new T();  
        // entity will be the type passed to `T` when instantiating `BaseImplementation`
    }
}

然后用法就像:

public class PersonImpl : BaseImplementation<PersonEntity, DataContext>
{
    public void Method1()
    {
        var entity = CreateEntity();
        // entity is typeof(PersonEntity);
    }
} 

答案 2 :(得分:1)

new()是一个约束,指定type参数必须具有公共无参数构造函数。有关泛型类型约束的更多信息,请参阅MSDN