存储库模式基本
本文关键字:模式 存储 | 更新日期: 2023-09-27 17:56:02
有人可以向我解释这些语句在 C# 中的含义吗?
class RepositoryBase : IDisposable, IRepositoryBase where TEntity : class{}
class DbContextFactory : IContextFactory where TContext : DbContext, new()
我明白RepositoryBase
继承自IDisposable
和IRepositoryBase
类。它后面的东西是什么意思?
类型约束
这些都是类型约束的示例。您可以从官方文档中阅读有关它们的更多信息:
where T : class
:类型参数必须是引用类型;这也适用于任何类、接口、委托或数组类型。
where T : new()
:类型参数必须具有公共无参数构造函数。当与其他约束一起使用时,必须最后指定 new() 约束。
where T : <base class name>
:类型参数必须是或派生自指定的基类。
所以在你的情况下:
class RepositoryBase<TEntity> : /* etc */ where TEntity : class{}
表示 RepositoryBase<TEntity>
中的TEntity
必须是引用类型,即对象。
对于第二种情况:
class DbContextFactory<TContext> : /* etc */ where TContext : DbContext, new()
表示TContext
必须是DbContext
的实例,并且TContext
必须具有该形式的公共构造函数
public TContext() { /* etc */ }
接口
原版海报上写着:
我明白
RepositoryBase
继承自IDisposable
和IRepositoryBase
阶级。它后面的东西是什么意思?
宣言
class RepositoryBase : IDisposable, IRepositoryBase
表示RepositoryBase
实现IDisposable
和IRepositoryBase
接口。RepositoryBase
不会从它们继承,因为它们不是可以从(在 C# 意义上)"继承"的类。
相反,IDisposable
和 IRepositoryBase
都是接口,它们仅将行为和方法指定为协定,但不指定实现。在 C# 中,命名所有以大写I
前缀开头的接口是一种约定。
你不是说
public class RepositoryBase<TEntity> : IDisposable, IRepositoryBase where TEntity : class{}
?
那么它只是意味着TEntity
泛型类型应该是一个类,仅此而已。
RepositoryBase 实现了接口 IDisposable 和 IRepositoryBase