Destruktory (Příručka programování C#)
Destruktory slouží k destruct instance tříd.
Poznámky
Destruktory nelze definovat ve strukturách.Používají se pouze s třídami.
Třída může mít pouze jeden objekt.
Destruktory nelze dědit nebo přetížení.
Destruktory nelze volat.Jsou vyvolána automaticky.
Destruktor trvat modifikátory nebo mít parametry.
Je například následující prohlášení destruktoru třídy Car:
class Car
{
~Car() // destructor
{
// cleanup statements...
}
}
Implicitně volání destruktoru Finalize na základní třídy objektu.Předchozí kód destruktoru tedy implicitně přeložit do následující kód:
protected override void Finalize()
{
try
{
// Cleanup statements...
}
finally
{
base.Finalize();
}
}
To znamená, že Finalize je volána metoda rekurzivně pro všechny výskyty řetězce dědičnosti z většinu odvozené pro odvozené nejméně.
[!POZNÁMKA]
Prázdný destruktory použity nebudou.Třída obsahuje destruktor, položka je vytvořena Finalize fronty.Při volání se objekt garbage collector je vyvoláno zpracovat frontu.Pokud se objekt je prázdný, tím pouze omezuje zbytečnou ztrátu výkonu.
Programátor nemá kontrolu nad při volání se objekt, protože je určena kolekcí odpadků.Garbage collector vyhledá objekty, které jsou již používány aplikace.Pokud objekt považuje způsobilé pro zničení, volání se objekt (pokud existuje) a uvolňuje volné paměti pro uložení objektu.Destruktory se také nazývají při ukončení programu.
Je možné vynutit uvolněné voláním Collect, ale ve většině případů, to je třeba se vyhnout protože mohou vytvořit problémy s výkonem.
Pomocí destruktory k uvolnění prostředků
Obecně C# nevyžaduje tolik Správa paměti, je třeba při vývoji s jazykem, který není cíl runtime s uvolněné.Je to proto,.NET Framework garbage collector implicitně spravuje přidělení a uvolnění paměti pro objekty.Však při aplikaci zapouzdřuje nespravované prostředky, jako je například systém windows, soubory a síťová připojení, používejte destruktory uvolnit tyto prostředky.Po způsobilé pro zničení objektu se spustí kolekcí odpadků Finalize metodu objektu.
Explicitní uvolnění prostředků
Pokud aplikace používá nákladné externí zdroje, doporučujeme také, že poskytují způsob výslovně uvolnit prostředek před kolekcí nesmyslné uvolnění objektu.Provést implementací Dispose metoda z IDisposable rozhraní, které provádí nezbytné vyčištění objektu.To může značně zvýšit výkon aplikace.I při této explicitní kontrolu nad prostředky se objekt se stane ochranné prostředky vyčistit, pokud volání Dispose metody se nezdařilo.
Další podrobnosti o čištění prostředků naleznete v následujících tématech:
Příklad
Následující příklad vytvoří tři třídy, které řetězce dědičnosti.Třída First je základní třída Second je odvozen od First, a Third je odvozen od Second.Všechny tři obsahovat destruktory.V Main(), je vytvořena instance třídy odvozené většinu.Při spuštění programu, Všimněte si, že destruktory pro tři třídy volány automaticky a v pořadí, většina odvozené pro odvozené nejméně.
class First
{
~First()
{
System.Diagnostics.Trace.WriteLine("First's destructor is called.");
}
}
class Second : First
{
~Second()
{
System.Diagnostics.Trace.WriteLine("Second's destructor is called.");
}
}
class Third : Second
{
~Third()
{
System.Diagnostics.Trace.WriteLine("Third's destructor is called.");
}
}
class TestDestructors
{
static void Main()
{
Third t = new Third();
}
}
/* Output (to VS Output Window):
Third's destructor is called.
Second's destructor is called.
First's destructor is called.
*/
Specifikace jazyka C#
Další informace naleznete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.
Viz také
Referenční dokumentace
Konstruktory (Příručka programování C#)