0

我知道ClientBase<T>该类显式地实现了IDisposable接口,但是我不明白为什么要显式地完成它。 ClientBase 没有实现 IDisposable 成员

如果MyClient派生自ClientBase<T>I 不能Dispose以这种方式明确的对象:

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

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

((IDisposable)client).Dispose();

Dispose当 Microsoft可以将其公开并允许开发人员显式调用它时,Microsoft 通过显式接口实现隐藏该类上的方法有什么好处?

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

4

2 回答 2

0

在最初几年或 .NET 中,由于可发现性,Close 优于 Dispose 流。如果您打开一个流,则认为寻找 Close 方法而不是 Dispose 更容易。

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

于 2015-11-24T11:39:56.237 回答
0

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

一次性

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

于 2015-11-24T11:42:56.457 回答