【发布时间】:2011-07-31 10:33:13
【问题描述】:
虽然在 SO 上有很多关于 IDisposable 的问答,但我还没有找到答案:
我通常遵循这样的做法,即当我的一个类拥有IDisposable 对象时,它也会实现IDisposable 并在拥有的对象上调用Dispose。然而最近我遇到了一个明确实现IDisposable 的类,从而阻止我直接调用Dispose 迫使我强制转换它,我觉得这很烦人且不必要。
所以问题是:为什么以及何时需要使用IDisposable 的显式接口实现?我知道明确地实现一个接口有完全好的和正当的理由,但是关于IDisposable,我不太清楚原因。
【问题讨论】:
-
这些“好的和正当的理由”是什么,为什么他们不应该为
IDisposable保留?为什么将对象投射到IDisposable会“烦人”? -
有时一个类需要实现两个或多个成员名称会冲突的接口。这是显式接口命名的一个很好和正确的用途。我同意 OP 的观点,即任意命名清理方法而不是 Dispose 的约定是愚蠢的。即使一个类有一个 Close 方法,这并不意味着它不应该也有一个 Dispose 方法。由于在调用 Close 之后调用 Dispose 最坏的情况是有点多余,所以同时使用这两种方法有什么问题?
-
@chiccodoro:IMO 显式接口实现在需要实现两个具有冲突成员的接口时非常有用。在任何其他情况下,拥有可以转换为接口而不是“成为”接口的对象是不自然和烦人的。
-
@chiccodoro:我认为这个 SO 问题很好地涵盖了它:stackoverflow.com/questions/143405/…
-
@supercat:您对 Close 等的观点并没有真正理解。我说“为什么这些原因不应该同样适用于 IDisposable?” - 意思是:如果对象实现的接口恰好有“Dispose”方法,但与 IDisposable 不同,那么需要显式实现,不是吗?
标签: c# .net idisposable explicit-interface