在接口声明中使用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代表什么?

在接口声明中使用where

您的IRepository是泛型类,TEntity是泛型类型参数。它就像实际类型的占位符。

TEntity: IEntity意味着您将需要使用的实际类型实现IEntity,并且在您的实际存储库实现中,您可以引用接口IEntity公开的方法和属性。

是否需要它取决于存储库的预期用途。通常,类型限制用于强制实现泛型所依赖的类型的某些属性。

你可以阅读为什么使用泛型约束?,你可能想要查看MSDN文档以获得更多官方报道。

至于"T",这是一个严格的惯例,追溯到c++,当这样的东西被称为"模板"。(这是你应该遵循的惯例。)

where TEntity : IEntity意味着TEntity类型必须实现IEntity接口。换句话说,在通用接口IRepository中,您可以使用实现IEntity接口的类型。

这取决于您的设计时间需求。

你可以用IEntity代替一般的TEntity用法。但是,你将被限制为IEntity的成员。

必须强制转换IEntity成员才能访问它的子类型成员。