明确实现IDisposable

Chr*_*Wue 14 .net c# idisposable explicit-interface

虽然IDisposable在SO上有相当多的问答,但我还没有找到答案:

我通常遵循这样的做法:当我的一个类拥有一个IDisposable对象时,它也实现IDisposable并调用Dispose拥有的对象.但是最近我遇到了一个IDisposable明确实现的类,因此阻止我直接Dispose强制我强制转换它,我觉得这很烦人且没必要.

所以问题是:为什么以及何时想要使用显式接口实现IDisposable?我知道明确地实现接口有完全正确和有效的理由但是对于IDisposable我来说不明确的原因.

Joe*_*Joe 15

我会说IDisposable.Dispose除非你有一个替代的等效方法(例如Close),否则有一个明确的实现是不寻常的.

在这种情况下,您的包装类可以调用Close而不是强制转换.

一个例子是WebResponseFramework <= V3.5中的类.有趣的是,在.NET 4中有一个公共的Dispose方法,所以微软现在可能已经决定明确的实现可能不是一个好的做法.

CLR安全团队的设计工程师Shawn Farkas在MSDN杂志上写道

虽然using块可以使用具有显式IDisposable实现的类,但我建议类永远不会以这种方式实现接口.如果您明确实现了IDisposable,那么在VisualStudio®中使用IntelliSense®探索对象模型的开发人员将不会注意到该对象具有Dispose方法