【发布时间】:2013-01-11 07:53:48
【问题描述】:
我试图从书籍、互联网和 stackoverflow 上找到我的问题的实际答案,但到目前为止没有任何帮助我,所以希望我能准确地表达我的问题以使其有意义。
一般来说,我总是发现如何释放内存的基本用法相同,大约是。如下,我确实理解代码本身:
public class MyClass : IDisposable
{
bool disposed = false;
public void Dispose()
{
if (!disposed)
{
Dispose(true);
GC.SuppressFinalize(this);
disposed = true;
}
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
//free managed ressources
}
// free other ressources
}
~MyClass()
{
Dispose(false);
}
}
方法的工作方式完全有意义。但现在我的问题是:为什么我们需要基类 IDisposable?在此代码示例中,我们定义了一个名为 Dispose() 的方法。正如我在各处读到的那样,该方法是 IDisposable 的一部分,但我们刚刚在 MyClass 中定义了该方法,如果我们不实现基类 IDisposable 或者我对这个假设有误,这段代码仍然可以工作?
我对 C# 并不完全陌生,但我还有很多东西要学,所以希望有人能在这里引导我朝着正确的方向前进。我检查了另一个具有相同问题的帖子,但找不到它,所以如果它确实存在并且它确实回答了我的问题,请引导我到那里,我将删除此帖子。
【问题讨论】:
-
IDisposable 不是 [base] 类。这是一个interface。为什么在 C# 中需要 any 接口? (IDisposable 的作用不亚于其他接口。)
-
感谢您的快速回复。好吧,既然我还有很多关于 C# 的知识,请回答你刚才问我的问题。
-
感谢您的链接,在我看来,讽刺有点不必要。我不知道基类和接口之间有如此大的区别
-
在任何情况下,接口都提供了一个主名类型(通过给定名称已知的类型/契约)而不影响对象的类层次结构。这允许在同一接口中使用不同类型的对象;一些接口,如 IDisposable(或 ISerializable)也建立了各种使用“规则和模式”。请参阅相应的文档。
-
我们能否减少重复的回答?
标签: c# memory idisposable base-class