在接口声明中使用where
本文关键字:where 接口 声明 | 更新日期: 2023-09-27 17:49:34
我有以下域对象:
public class Bank : IEntity
{
}
和以下IRepository:
public interface IRepository<TEntity> where TEntity : IEntity
{
}
是否需要where TEntity : IEntity
?TEntity是IEntity类型,这是什么意思?当我使用TEntity之类的东西时,有什么命名约定吗?T代表什么?
您的IRepository
是泛型类,TEntity
是泛型类型参数。它就像实际类型的占位符。
TEntity: IEntity
意味着您将需要使用的实际类型实现IEntity
,并且在您的实际存储库实现中,您可以引用接口IEntity
公开的方法和属性。
是否需要它取决于存储库的预期用途。通常,类型限制用于强制实现泛型所依赖的类型的某些属性。
你可以阅读为什么使用泛型约束?,你可能想要查看MSDN文档以获得更多官方报道。
至于"T",这是一个严格的惯例,追溯到c++,当这样的东西被称为"模板"。(这是你应该遵循的惯例。)
where TEntity : IEntity
意味着TEntity
类型必须实现IEntity
接口。换句话说,在通用接口IRepository
中,您可以使用实现IEntity
接口的类型。
这取决于您的设计时间需求。
你可以用IEntity
代替一般的TEntity
用法。但是,你将被限制为IEntity
的成员。
必须强制转换IEntity
成员才能访问它的子类型成员。