以下函数给出编译错误"不要覆盖object.Finalize.而是提供析构函数."
protected override void Finalize()
{
this.Dispose();
base.Finalize();
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*ard 19
finalizer方法称为~name()用您的类名替换"name".
C#编译器将从中生成终结器.
但请注意:
SafeHandle而不是自己写.例如
class MyClass : IDisposable {
private IntPtr SomeNativeResource;
~MyClass() {
Dispose(false);
}
public void Dispose() {
Dispose(true);
}
protected virtual void Dispose(bool disposing) {
if (disposing) {
// Dispose any disposable fields here
GC.SuppressFinalize(this);
}
ReleaseNativeResource();
}
}
Run Code Online (Sandbox Code Playgroud)
子类可以覆盖Dispose(bool)以添加它们添加的任何添加字段并调用基础实现.
编辑:添加有关何时完成的示例和说明.
你没有.
听取编译器.你不应该覆盖Finalize.相反,您应该实现IDisposible并覆盖Dispose.
除非您明确需要释放对象直接拥有的资源,否则您应该能够在Dispose方法中执行所需的所有操作.
但如果你必须:
public class MyClass
{
public MyClass() { ... } // Constructor
public ~MyClass() { ... } // Destructor/Finalizer
}
Run Code Online (Sandbox Code Playgroud)
要小心,因为终结器很棘手,如果实施不当可能带来一些相当大的性能开销.
| 归档时间: |
|
| 查看次数: |
9262 次 |
| 最近记录: |