【问题标题】:Error: Do not override object.Finalize. Instead, provide a destructor错误:不要覆盖 object.Finalize。相反,提供一个析构函数
【发布时间】:2010-11-22 21:22:44
【问题描述】:

在以下代码中出现上述错误。如何纠正它。谢谢。 请寻找

protected override void Finalize() {     Dispose(false); } 

在下面的代码中。

using Microsoft.Win32; 
using System.Runtime.InteropServices; 

public class Kiosk : IDisposable 
{ 

    #region "IDisposable" 

    // Implementing IDisposable since it might be possible for 
    // someone to forget to cause the unhook to occur. I didn't really 
    // see any problems with this in testing, but since the SDK says 
    // you should do it, then here's a way to make sure it will happen. 

    public void Dispose() 
    { 
        Dispose(true); 
        GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
        if (disposing) { 
        } 
        // Free other state (managed objects). 
        if (m_hookHandle != 0) { 
            UnhookWindowsHookEx(m_hookHandle); 
            m_hookHandle = 0; 
        } 
        if (m_taskManagerValue > -1) { 
            EnableTaskManager(); 
        } 
    } 

    protected override void Finalize() 
    { 
        Dispose(false); 
    } 

    #endregion 
} 

【问题讨论】:

    标签: c# idisposable destructor finalizer


    【解决方案1】:

    Finalize() 是一种特殊方法,您无法在代码中覆盖。改用析构函数:

    ~Kiosk() 
    { 
        Dispose(false); 
    } 
    

    【讨论】:

    • +1 用于说明原因,而不仅仅是转储代码。
    • 好吧,他实际上并没有提到原因。异常本身说明了同样的事情。
    【解决方案2】:

    照它说的做。而不是:

    protected override void Finalize() 
    { 
        Dispose(false); 
    } 
    

    有:

    ~Kiosk () 
    { 
        Dispose(false); 
    } 
    

    【讨论】:

      【解决方案3】:

      在 C# 中,以下语法完全符合您想要完成的目标。

      ~Kiosk()
      {
          Dispose(false);
      }
      

      【讨论】:

        猜你喜欢
        • 2015-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-27
        • 2015-08-11
        • 2018-01-02
        • 2017-04-21
        • 1970-01-01
        相关资源
        最近更新 更多