当dispose()方法可以写在类中时,为什么要使用IDisposable

She*_*ezi 3 c# oop

标题很清楚地解释了这个问题.我想知道为什么我要实现在类中只提供一个方法定义的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)存储库一起使用并使用模拟存储库进行测试的控制器.

  • 我添加了一个示例,但SO问题不是获得基本教程的正确位置.请参阅[google results](https://www.google.nl/search?q=c%23+tutorial+interface&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox -一个). (2认同)