为什么.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 方法更容易。
这里是微软之所以这样实现的原因,他们也建议我们在相同的情况下也这样做。这意味着您应该调用 public Close 方法,它的行为与 Dispose 完全相同。
考虑在 Dispose() 之外提供方法 Close(),如果 close 是该领域的标准术语。
这样做时,务必使 Close 实现与 Dispose 相同,并考虑显式实现 IDisposable.Dispose 方法。
我知道 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 方法更容易。
这里是微软之所以这样实现的原因,他们也建议我们在相同的情况下也这样做。这意味着您应该调用 public Close 方法,它的行为与 Dispose 完全相同。
考虑在 Dispose() 之外提供方法 Close(),如果 close 是该领域的标准术语。 这样做时,务必使 Close 实现与 Dispose 相同,并考虑显式实现 IDisposable.Dispose 方法。