标题很清楚地解释了这个问题.我想知道为什么我要实现在类中只提供一个方法定义的IDisposable接口,在另一个类中,我可以显式定义dispose()方法并释放所有非托管资源.
说我有这两个班
class MyClass : IDisposable
{
public void Dispose() { }
}
class MyClass2
{
public void Dispose() { }
}
Run Code Online (Sandbox Code Playgroud)
MyClass和MyClass2之间究竟有什么区别?
Hen*_*man 10
这个例子中一个非常具体的结果IDisposable是,第一个类可以在一个using() {}语句中使用,第二个类不能:
using (var c1 = new MyClass()) { ... } // Ok
using (var c2 = new MyClass2()) { ... } // Error
Run Code Online (Sandbox Code Playgroud)
更一般的答案是接口提供允许替换的合同.搜索"接口的好处"或类似的东西以获取更多信息.例如,这个SO答案有一个列表.
替换的一个例子:
public interface IRepository { ... }
public class RealRepository : IRepository { ... }
public class MockRepository : IRepository { ... }
class MyController { public IRepository { get; set; }
Run Code Online (Sandbox Code Playgroud)
这个(粗略的)片段显示了一个可以与真实(Db)存储库一起使用并使用模拟存储库进行测试的控制器.