为什么我们要实现ICloneable或IDisposable接口?我不是在问ICloneable或IDisposable的作用,而是想了解相对于编写一个方法来释放或克隆对象,实现这些接口的好处是什么?
因为您可能希望相同的代码适用于不同类的实例。例如,表单清理程序希望迭代所有组件并处理它们。为了做到这一点,它需要通过类型引用组件:可以是一个共同的基类或接口。单继承意味着一个共同的基类并不总是可行的(假设我的表单既有FileStream又有Button - 他们能拥有什么共同的基类让清理程序通过它们进行访问?);因此需要使用接口。
除了更多的接口智慧之外,接口可以用作消费者代码和服务代码之间的契约。与其说这是我们将处理的对象,不如使用接口来达成协议,这就是返回对象的样子。在代码中,可能是这样的:
服务代码
public IEnumerable<int> GetNumbers(){ return new []{1,2,3,4,5}; }
客户端代码:
var result = serviceProxy.GetNumbers();
在这里,服务代码可以更改实现以返回满足IEnumerable要求的任何类,而不会破坏客户端代码。
除此之外,您还有其他应用程序,如IoC DI,单元测试和对象模拟。所有这些都能够获得多态好处。
除了其他原因外,阅读有关using
块的内容。
Phoebus已经给了很好的回答,但我想再补充一点。
它会强制你编写期望进行克隆或创建可处理对象所需的方法。如果只需要编写方法,你是否总是包含所有必要的方法,或者签名是否总是相同?
如果有一个新的框架,他们添加了一些东西,来确保操作被正确地执行,通过使用接口,那么它会强制你实现任何新的更改,因为你的应用程序将无法编译。
接口将“做什么”与“如何做”分离。客户端处理接口类型,无需知道实现类是什么,因为他们可以依赖于它强制执行的契约。
这对于生成动态代理的情况非常重要。客户端不需要知道他们正在处理代理,这使您可以自由地注入所需的任何行为。这是面向方面编程的常见技术。