3 Stimmen

Das Singleton-Objekt in .NET entsorgen

Ich habe zwei Klassen ClassA und ClassB, die beide einen Verweis auf ein Singleton-Objekt ClassHelper haben. Meine Frage ist, wie ich das Singleton-Objekt entsorgen sollte, sobald ich mit ClassA und ClassB fertig bin.

Bearbeiten:

public ClassA
{
  CHelper obj;

  public ClassA()
  {
    obj = obj.GetInstance("Initialise");
    obj.CallFuncA();
  }
}

On the same lines
public ClassB
{
  CHelper obj;

  public ClassB()
  {
    obj = obj.GetInstance("Initialise");
    obj.CallFuncB();
  }
}

where 

CHelper
{
   private static sm_CHelper;

   public static GetInstance(string strInitialise)
   {
      if(sm_CHelper == null)
      {
         sm_CHelper = new CHelper(strInitialise);
      }
   }

   private CHelper(string strInitialise)
   {
      //do something here 
   }

   public CallFuncA()
   {
     // do something here
   }
   public CallFuncB()
   {
     // do something here
   }
}

Mit freundlichen Grüßen Lernende

1voto

Peter Punkte 34999

Wenn Sie über das Muster singelton sprechen, dann sollten Sie es nicht entsorgen...., wenn Sie nicht auf das Muster singelton verweisen, dann könnten Sie versuchen, den Deconstructor zu verwenden, um Ihre Entsorgungslogik auszuführen.

0voto

Hans Kesting Punkte 35936

Dieses Singleton sollte für die Dauer der Anwendung erhalten bleiben. Sie sollten es also nicht entsorgen, wenn Sie die ClassA- und ClassB-Objekte entsorgen.

0voto

Jimmy Punkte 85199

Ich habe noch nie ein solches Beispiel gesehen. Ich würde wahrscheinlich so etwas machen wie:

 class Resource {

     static Resource Instance  = new Resource();
     static int count = 2;

     public Resource CheckOut() { 
        if (--count <= 0)
            Instance = null;
        return Instance;
     }
 }

Auf diese Weise wird die Ressource, nachdem sowohl KlasseA als auch KlasseB sie ausgecheckt haben, nicht mehr durch die statische Referenz gehalten. Nachdem KlasseA und KlasseB ihren Verweis auf die Ressource verloren haben, wird der Finalizer in der nächsten Runde der Garbage Collection aufgerufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X