任何人都可以帮助我使用以下类声明中的行where TEntity : class, IEntity, new()
。
public abstract class BaseEntityManager<TEntity>
where TEntity : class, IEntity, new()
答案 0 :(得分:28)
where TEntity : ...
将约束应用于通用参数TEntity。在这种情况下,约束是:
class:TEntity的参数必须是引用类型
IEntity:参数必须是或实现IEntity接口
new():参数必须具有公共无参数构造函数
答案 1 :(得分:4)
类声明后的where
关键字限制泛型TEntity
的类型。在这种情况下,TEntity
必须是一个类(意味着它不能是int
或DateTime
之类的值类型),并且必须< / em>实现接口IEntity
。 new()
约束表示此类中的方法可以调用TEntity
表示的泛型类的默认构造函数(例如new TEntity()
)
答案 2 :(得分:0)
泛型类型约束在哪里。这些行读取TEntity类型必须是引用类型而不是值类型,必须实现接口IEntity并且它必须具有不带参数的构造函数。
答案 3 :(得分:-1)
问题是什么?
让我拍摄一下我认为的问题。约束确保您只能使用泛型参数继承BaseEntityManager,该参数是实现IEntity并包含无参数构造函数的引用类型。
E.X。
public class Product : IEntity {
public Product() {}
}
public class Wrong {
public Wrong() {}
}
public class WrongAgain : IEntity {
private Wrong() {}
}
// compiles
public ProductManager : BaseEntityManager<Product> {}
// Error - not implementing IEntity
public WrongManager : BaseEntityManager<Wrong> {}
/ Error - no public parameterless constructor
public WrongAgainManager : BaseEntityManager<WrongAgain> {}
请参阅link text