我有一个像这样实现的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>
谢谢。
答案 0 :(得分:3)
答案 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。