我有以下域对象:
public class Bank : IEntity
{
}
以下IRepository:
public interface IRepository<TEntity> where TEntity : IEntity
{
}
需要where TEntity : IEntity
吗?这是什么意思,TEntity属于IEntity类型?当我使用像TEntity这样的东西时,是否有任何命名约定? T代表什么?
答案 0 :(得分:2)
您的IRepository
是通用类,TEntity
是泛型类型参数。它就像实际类型的占位符。
TEntity: IEntity
表示您将要求使用的实际类型实现IEntity
,并且在您的实际存储库实现中,您可以引用接口IEntity
公开的方法和属性。
是否需要它取决于存储库的预期用途。通常,类型限制用于强制执行泛型实现所依赖的类型的某些属性。
答案 1 :(得分:2)
您可以在Why use generic constraints?中阅读有关通用约束及其用法的信息,您可能需要查看MSDN docs以获取更多官方报道。
对于'T',这是一个严格的约定,当这些东西被称为'templates'时,可以追溯到C ++。 (不过,这是一个你应遵循的惯例。)
答案 2 :(得分:1)
where TEntity : IEntity
表示TEntity
类型必须实现IEntity
接口。换句话说,在通用接口IRepository
中,您可以使用实现IEntity
接口的类型。
答案 3 :(得分:1)
这取决于您的设计时间需求。
您可以使用TEntity
替换通用IEntity
用途。但是,您将仅限于IEntity
的成员。
您必须转发IEntity
成员才能访问其子类型成员。