为什么.NET BCL class ClientBase 显式实现 IDispose

Why does the .NET BCL class ClientBase EXPLICITLY implement IDispose

我知道 ClientBase<T> class 显式实现了 IDisposable 接口,但是我不明白为什么要显式实现它。 ClientBase doesn't implement IDisposable member

如果 MyClient 派生自 ClientBase<T> 我不能通过这种方式显式 Dispose 对象:

MyClient client = new MyClient();
client.Dispose();

除非我转换到底层接口或使用 using 语句设计模式实现对象生命周期:

((IDisposable)client).Dispose();

Microsoft 在他们本可以 public 并允许开发人员显式调用它时通过显式接口实现隐藏此 class 上的 Dispose 方法有什么好处?

这不像 class ClientBase<T> 正在实现两个具有冲突方法声明的不同接口,因此我认为在这种情况下不需要显式接口实现,除非我遗漏了什么.. .........

在最初的几年或 .NET 中,由于可发现性,Close 优于 Dispose on streams。如果您打开一个流,人们认为寻找 Close 方法比 Dispose 方法更容易。

http://blogs.msdn.com/b/kimhamil/archive/2008/03/15/the-often-non-difference-between-close-and-dispose.aspx

这里是微软之所以这样实现的原因,他们也建议我们在相同的情况下也这样做。这意味着您应该调用 public Close 方法,它的行为与 Dispose 完全相同。

IDisposable

考虑在 Dispose() 之外提供方法 Close(),如果 close 是该领域的标准术语。 这样做时,务必使 Close 实现与 Dispose 相同,并考虑显式实现 IDisposable.Dispose 方法。