好吧,我试图了解可以通过代码显式完成的内存过程的释放。
我在下面的 MS 线程中看到 Dispose 方法是在 Component 类中实现的。在这里,我有三个疑问。
组件类派生自 IDisposable,但是,在这个类库中,我发现它没有实现方法 Dispose,甚至看起来都不是“public void Dispose() {}”。但是当我只是编写一个类并声明一个没有任何主体的方法时,它会给我编译时错误说,我应该定义主体或使其抽象。为什么会有这种差异?
我一般用这种方式,比如说“connection.Dispose();” 在 finally 块中处理 sqlconnection。我知道,SqlConnection 是从 DBConnection 派生的,而 DBConnection 又是从 Component 派生的。当我查看 Component 类时,我只看到方法“public void Dispose();”的声明 那么它实际上是在哪里实现的呢?
我还看到了一些专门实现的代码,例如下面 MS 网站中给出的代码。他们为 Dispose 状态声明了一个 bool 变量,并有一个新的 Dispose 方法,他们在该方法中调用对象上的 Component Dispose。他们还对非托管资源使用 Kernel32 方法 CloseHandle。这种方法有什么用?在处理它时,我从未将它用于我的 SqlConnection (这也是一个非托管资源)。
http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize(v=vs.110).aspx
有人也可以帮助我简短地理解上面的三个问题。我只是在学习所有这些。谢谢