Il metodo Finalize



Il metodo Finalize viene usato in C# ed è in pratica il distruttore di una classe.

E’ ereditato direttamente dalla classe Object, quindi è disponibile in ogni classe che andremo a creare.

E’ vietato però scriverlo come si farebbe per gli altri metodi, cioè:

class Man
{
void Finalize()
{
//nothing...
}
}

Per scriverlo, infatti, bisogna usare una forma che è in pratica la stessa usata per i distruttori del C++:

class Man
{
~Man()
{
Console.WriteLine("Oggetto Man in fase di distruzione...");
}
}

Il metodo Finalize, però, non viene invocato sempre subito dopo che il riferimento ad un oggetto sia impostato a null, ma anche alcuni secondi o minuti dopo.

Per evitare questo possiamo usare un metodo statico della class GC, che rappresenta il Garbage Collector.

Vediamo un esempio:

static void Main(string[] args)
{
Man man = new Man();
man = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine("Programma in fase di terminazione");
Console.ReadLine();
}

GC.Collect() avvia il Garbage Collector alla raccolta degli oggetti non più utilizzati dal programma.

GC.WaitForPendingFinalizers() aspetta che il programma esegua tutti i metodi Finalize delle varie classi che sta eliminando.

In questo modo si ha la sicurezza che gli oggetti non utilizzati vengano cancellati realmente dalla memoria del computer.

Annunci sponsorizzati:
Condividi su Facebook Condividi su Twitter!
Pinterest