我正在编写存储库,我遇到了以下问题:
下面的代码显示错误,好像存储库继承了IRepository接口并且类型T
继承了IDisposable
public class GenericRepository<T> : IGenericRepository<T> where T : class, IDisposable
所以,当我改变继承顺序时,问题就解决了
public class GenericRepository<T> : IDisposable, IGenericRepository<T> where T : class
我对这个问题的解决方案是正确的吗?
答案 0 :(得分:3)
在您的第一个代码段中,IDisposable
是约束的一部分。
在您的第二个代码段中,IDisposable
是GenericRepository<T>
实现的界面。
答案 1 :(得分:3)
public class GenericRepository<T> : IGenericRepository<T> where T : class, IDisposable
约束类型参数T以实现IDisposable
。
使用您显示的第二个代码,无论T是什么,实现 GenericRepository<T>
界面都需要IDisposable
。
答案 2 :(得分:2)
前者:
public class GenericRepository<T> : IGenericRepository<T> where T : class, IDisposable
对类型IDisposable
强制执行T
约束,而:
public class GenericRepository<T> : IDisposable, IGenericRepository<T> where T : class
要求GenericRepository<T>
实施IDisposable
。
由您决定如何设计存储库 - 我会选择后者。我认为存储库有责任处置其“资源”。
答案 3 :(得分:1)
嗯,你的第一行明确指出T必须是IDisposable。
第二行表示您的GenericRepository必须是IDisposable。如果这是你的意图 - 是的,你的解决方案是正确的。