2009-08-26 5 views
2

, um den obigen Fehler in folgendem Code zu erhalten. Wie man es korrigiert. Vielen Dank. Bitte suchen Sie nachFehler: überschreiben Sie nicht object.Finalize. Stellen Sie stattdessen einen Destruktor

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

im Code unten.

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 
} 

Antwort

7

Tun Sie, was es sagt. Statt:

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

haben:

~Kiosk() 
{ 
    Dispose(false); 
} 
11

Finalize() ist eine spezielle Methode, die Sie nicht in Code überschreiben können. Verwenden Sie stattdessen die Destruktorsyntax:

~Kiosk() 
{ 
    Dispose(false); 
} 
+0

+1 für die Erwähnung ein wenig über warum, anstatt nur Code zu dumping. –

+1

Nun, er erwähnt eigentlich nicht warum. Die Ausnahme selbst gibt das Gleiche an. –

1

In C# kompiliert die folgende Syntax genau das, was Sie erreichen möchten.

~Kiosk() 
{ 
    Dispose(false); 
}