【发布时间】:2016-04-15 10:56:53
【问题描述】:
我一直在研究 C# 中的接口有一段时间了,根据 MSDN
“接口更适合您的应用程序需要许多可能不相关的对象类型来提供某些功能的情况。”
https://msdn.microsoft.com/en-in/library/3b5b8ezk(v=vs.90).aspx
当实现 Dispose() 而不是使用 IDisposable 接口时,我可以简单地定义 3 Dispose() 的方法并将其提供给用户。我的问题是“为什么微软创建了 IDisposable 接口以及使用接口实现 Dispose() 的目的是什么”。
这就是我的意思
//This method is used to release Managed Resources.
public void Dispose()
{
this.Dispose();
}
//This method is used to release both managed & unmanaged Resources.
public void DisposeAll()
{
this.Dispose();
GC.SuppressFinalize(this);
ReleaseUnmangedResources();
}
//This method is used to release only unmanaged Resources.
public void DisposeUnmanaged()
{
ReleaseUnmangedResources();
}
如果这个问题太愚蠢或太简单,我很抱歉。请帮助我理解接口。
【问题讨论】:
-
允许我们类的用户决定如何处理它的资源是一个非常糟糕的主意。为什么要公开您拥有托管或非托管资源的事实?只需公开
Dispose,您就可以告诉用户他们需要请您清理,但他们不需要知道原因。 -
仅供参考,读起来不错-stackoverflow.com/questions/538060/…
-
不止一个原因,但最重要的肯定是 .NET 不支持多重继承。如果您确实需要自己释放非托管资源,99.9% 的时间都做错了,那么您应该使用一次性模式并实现终结器。正确的做法是用 SafeHandle 类包装它们。很少需要自己编写。