C# 为什么我在使用“时看到错误”;“工作单位”;使用通用接口?
我有一个名为:C# 为什么我在使用“时看到错误”;“工作单位”;使用通用接口?,c#,C#,我有一个名为:GenericRepository的泛型类存储库,还有一个名为:IGenericRepository的泛型接口,Product是我在数据库中的一个表 当我以这种方式使用通用存储库的“工作单元”时: public class UnitOfWork: IDisposable { GroceryStore_DBEntities db = new GroceryStore_DBEntities(); private IGenericRepository<Product
GenericRepository
的泛型类存储库,还有一个名为:IGenericRepository
的泛型接口,Product
是我在数据库中的一个表
当我以这种方式使用通用存储库的“工作单元”时:
public class UnitOfWork: IDisposable
{
GroceryStore_DBEntities db = new GroceryStore_DBEntities();
private IGenericRepository<Product> _genericRepository;
public IGenericRepository<Product> GenericRepository
{
get
{
if (_genericRepository == null)
{
_genericRepository = new GenericRepository<Product>(db);
}
return _genericRepository;
}
}}
公共类UnitOfWork:IDisposable
{
GroceryStore_DBEntities db=新的GroceryStore_DBEntities();
私人IGenericRepository(通用repository);;
公共地理位置一般地理位置
{
得到
{
if(_genericRepository==null)
{
_genericRepository=新的genericRepository(db);
}
返回-一般存储;
}
}}
我面临以下两个错误:
我有以下声明:
public interface IGenericRepository<TEntity>
where TEntity: class
{ }
public class GenericRepository<TEntity>
where TEntity: class, IGenericRepository<TEntity>
{ }
公共接口IGenericRepository
地点:班级
{ }
公共类通用存储库
其中tenty:类,iGeneric存储
{ }
您写道:
public interface IGenericRepository<TEntity>
where TEntity: class
{ }
public class GenericRepository<TEntity>
where TEntity:class, IGenericRepository<TEntity>
{ }
也就是说,T的排序列表要求T与其他T可比较
我想你的意图是
public class GenericRepository<TEntity> :
IGenericRepository<TEntity>
where TEntity:class
{ }
公共类通用存储库:
IGenericRepository
地点:班级
{ }
对吧?基类和接口列表位于约束之前;您将其放入约束中。
也就是说,类声明如下所示:
class ClassName<T> :
BaseClass,
IInterface1,
IInterface2
where
T : CONSTRAINT,
CONSTRAINT,
...
类名:
基类,
界面1,
界面2
哪里
T:约束,
约束,
...
约束也必须以正确的顺序出现如果您对类声明的语法有疑问,请阅读C#规范。你似乎对事情发生的顺序有些困惑。问题似乎在于如何定义
genericsposition
。我们看不到。请显示类和接口的约束,例如您的IGenericRepository
类有一个奇怪的约束,可能where tenty:IGenericRepository
。公共接口IGenericRepository where tenty:class公共类GenericRepository where tenty:class,IGenericRepositoryGenericRepository where tenty:class,IGenericRepository
应该是GenericRepository:IGenericRepository where tenty:class
谢谢。它起作用了。但是你能告诉我代码错误的原因吗?@MohammadYoosefiyan:我会补充一些注释。但你真的应该读一下C#规范。它详细描述了类声明的各个部分以及它们必须出现的顺序。非常感谢“Eric”。正如你所说,我不知道带约束的语法。另外,我还有一个问题:“BaseClass”是什么意思?@MohammadYoosefiyan:如果你不了解OO编程的基础知识,你就不应该在泛型类型的高级主题上乱搞!在尝试做高级工作之前,先了解基础知识。
class ClassName<T> :
BaseClass,
IInterface1,
IInterface2
where
T : CONSTRAINT,
CONSTRAINT,
...