A metódusok kapcsán volt szó a konstruktorokról. A finalizer ezek ellentettje. Egy osztály finalizere akkor fog lefutni, mikor a belőle létrehozott objektum életciklusa véget ér. Az objektumunk életciklusa .NET esetén pedig akkor ér véget, mikor nem mutat már rá több referencia.
A struktúrák nem rendelkezhetnek finalizer metódussal. A finalizer megalkotására szintén vonatkozik pár szabály. Egy osztály csak egy finalizer metódust tartalmazhat, nem lehet ellátni elérés módosítóval, valamint a finalizer nevének meg kell egyeznie az osztály nevével, viszont a hullámvonal (~) karakterrel kell kezdődnie.
Mivel a C# nyelv menedzselt, ezért ha egy objektum értékét null-ra állítjuk, akkor nem biztos, hogy azonnal le fog futni az osztály finalizer metódusa. A memóriát a szemétgyűjtő felügyeli. A szemétgyűjtő ciklikusan végignézi a memóriát és a null értékeket eltávolítja a memóriából, a hozzájuk tartozó memóriaterületet pedig felszabadítja.
Ha az osztályunk nem rendelkezik finalizer metódussal, akkor sincs nagy gond. Finalizer metódust csak olyan esetekben kell írnunk, ha az osztályunkban olyan erőforrásokat használunk, amelyek közvetlenül az operációs rendszerhez köthetőek. Ez egy igen speciális eset, így ezek használatáról a későbbiekben (az IDisposable felület kapcsán) lesz majd szó.
A finalizer szintaxisa egy osztály esetén:
public class FinalizerPelda
{
public FinalizerPelda()
{
//konstruktor kód
}
~FinalizerPelda()
{
//finalizer kód
}
}