为什么.NET BCL类ClientBase明确地实现了IDispose

时间:2015-11-24 11:27:55

标签: c# dispose using-statement explicit-interface

我知道db.cloneCollection('localhost:27018', 'things_2'); var things2array = db.things2.find().toArray(); null; db.things.insert(things2array,{ ordered : false });类显式实现了ClientBase<T>接口,但是我不明白为什么它是明确地完成的。 ClientBase doesn't implement IDisposable member

如果IDisposable来自MyClient我无法通过这种方式明确ClientBase<T>

Dispose

除非我使用MyClient client = new MyClient(); client.Dispose(); 语句设计模式转换为底层接口或实现对象生存期:

using

当Microsoft将((IDisposable)client).Dispose(); 方法公开并允许开发人员明确调用它时,通过显式接口实现隐藏Dispose方法有什么好处?

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

2 个答案:

答案 0 :(得分:0)

在最初的几年或.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

答案 1 :(得分:0)

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

IDisposable

CONSIDER提供方法Close(),除了Dispose()之外,如果close是该区域的标准术语。 这样做时,将Close实现与Dispose相同并考虑显式实现IDisposable.Dispose方法非常重要。