存储库模式基本

本文关键字:模式 存储 | 更新日期: 2023-09-27 17:56:02

有人可以向我解释这些语句在 C# 中的含义吗?

class RepositoryBase : IDisposable, IRepositoryBase where TEntity : class{}
class DbContextFactory : IContextFactory where TContext : DbContext, new() 

我明白RepositoryBase继承自IDisposableIRepositoryBase类。它后面的东西是什么意思?

存储库模式基本

类型约束

这些都是类型约束的示例。您可以从官方文档中阅读有关它们的更多信息:

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继承自IDisposableIRepositoryBase阶级。它后面的东西是什么意思?

宣言

class RepositoryBase : IDisposable, IRepositoryBase

表示RepositoryBase实现IDisposableIRepositoryBase接口RepositoryBase不会从它们继承,因为它们不是可以从(在 C# 意义上)"继承"的类。

相反,IDisposableIRepositoryBase 都是接口,它们仅将行为和方法指定为协定,但不指定实现。在 C# 中,命名所有以大写I前缀开头的接口是一种约定。

你不是说

public class RepositoryBase<TEntity> : IDisposable, IRepositoryBase where TEntity : class{} 

那么它只是意味着TEntity泛型类型应该是一个类,仅此而已。

RepositoryBase 实现了接口 IDisposable 和 IRepositoryBase