[Aiuto] Pattern Dispose come funziona ???

di il
2 risposte

[Aiuto] Pattern Dispose come funziona ???

Ciao a tutti, sto imparando il C#....ma non capisco bene il pattern dispose come funziona...
e ho un po di dubbi...qualcuno puo darmi una mano ^^;
Questo è l'esempio offerto da M ....ho segnato i passaggi che non mi sono chiari:P

       // Design pattern for a base class.
public class Base: IDisposable
{
   //Implement IDisposable.
   public void Dispose() 
   {
     Dispose(true);
      GC.SuppressFinalize(this);   // questo metodo server per notificare al GC che non
                                               // deve occuparsi dell istanza di questa classe?
   }

   protected virtual void Dispose(bool disposing) 
   {
      if (disposing) 
      {
         // Free other state (managed objects).  //  qui non capisco....
      }
      // Free your own state (unmanaged objects).
      // Set large fields to null.
   }

   // Use C# destructor syntax for finalization code.
   ~Base()      
   {
      // Simply call Dispose(false).
      Dispose (false);    // perchè viene richiamato con false....per evitare una chiamata Finalized?
   }
}
// Design pattern for a derived class.
public class Derived: Base
{   
   protected override void Dispose(bool disposing) 
   {
      if (disposing) 
      {
         // Release managed resources.
      }

    }
}

Grazie un anticipo per la vostra risposta!

2 Risposte

  • Re: [Aiuto] Pattern Dispose come funziona ???

    Allora, io ho usato il Dispose in una mia classe che appartiene ad una libreria che mi permette di utilizzare n db mantenendo la cosa trasparente alle applicazioni che utilizzano tale libreria. Per fare ciò avevo bisogno che tale classe, che si occupa delle operazioni su un specifico db (una classe per ogni db per intenderci), una volta che viene scaricata la classe mi chiudesse la connessione ( vedi ad esempio il costrutto using che di occupa di fare il dispose della classe inizializzata ). Per fare ciò ho ereditato il metodo Dispose dall'interfaccia IDisposable e ho implementato semplicemente la funzione di chiusura della connessione.
  • Re: [Aiuto] Pattern Dispose come funziona ???

    Volevo chiedere una cosa riguardo al metodo Dispose (sarebbe inutile aprire un altro topic). Ho delle variabili globali con risorse non gestite (Font, Pen, ecc....) nella mia classe "Form1" ereditata da Form. Queste variabili sono globali e non posso renderle locali (è una storia lunga). Quando chiuderò l'applicazione, verrà automaticamente invocato il metodo Dispose della classe....ma verranno automaticamente invocati i Dispose di tutti i suoi oggetti con risorse non gestite (sopra elencati) oppure devo invocare io manualmente i loro Dispose? Quindi, con l'istruzione predefinita "instanza_di_Form1.Dispose()" il GC invocherà anche i Dispose degli oggetti globali di Form1 con risorse non gestite oppure no?
Devi accedere o registrarti per scrivere nel forum
2 risposte