任何人都可以解释层次结构树公共接口IGenericRepository<T>,其中T:类?



我们编写代码,以及何时使用通用回购模式,但有人能解释一下这个约定吗?任何人都可以解释这段代码,这样我们就可以理解这种继承是如何工作的。public interface IGenericRepository < T > where T: class

这不是继承;它是一个类型约束。

它限制您的开发人员不使用泛型存储库中的类,这些类不是DB对象的实际表示形式。

想象一下,所有映射的实体都实现了一个类型为GuidId字段。您可以将存储库限制为仅可用于具有以下Id的对象:

public interface IEntity
{
public Guid Id
}
public interface IGenericRepository < T > where T: IEntity

您的Generic Repo将仅限于实现该特定接口的类型,并且您可以确保所有具体实现都具有Guid Id属性。

public interface IGenericRepository<T> where T : class中没有发生继承。

where T: class是一个通用约束,要求T是引用类型(不可为null的引用类型,因为C#8在可为null上下文中(:

where T : class-类型参数必须是引用类型。此约束也适用于任何类、接口、委托或数组类型。在C#8.0或更高版本中的可为Null的上下文中,T必须是不可为null的引用类型。

例如,您不能创建int(IGenericRepository<int>(的IGenericRepository,因为它不会编译,但您可以创建存储库,例如某个自定义类的IGenericRepository<MyClass>。这种限制通常来自EF Core之上的repos构建(尽管有些人会认为将通用存储库模式与EF一起使用实际上是反模式(,因为它需要将实体类型限制为class

相关:

  • 泛型类型参数
  • 通用接口
  • 对类型参数的约束
  • 值类型和引用类型

相关内容

最新更新