这两种继承有什么区别?

时间:2013-12-03 17:51:12

标签: c# oop repository idisposable

我正在编写存储库,我遇到了以下问题:

下面的代码显示错误,好像存储库继承了IRepository接口并且类型T继承了IDisposable

public class GenericRepository<T> : IGenericRepository<T> where T : class, IDisposable

所以,当我改变继承顺序时,问题就解决了

public class GenericRepository<T> : IDisposable, IGenericRepository<T> where T : class

我对这个问题的解决方案是正确的吗?

4 个答案:

答案 0 :(得分:3)

在您的第一个代码段中,IDisposable是约束的一部分。

在您的第二个代码段中,IDisposableGenericRepository<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。如果这是你的意图 - 是的,你的解决方案是正确的。