Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az utasítás célja finally annak biztosítása, hogy az objektumok, általában a külső erőforrásokat tartalmazó objektumok szükséges tisztítása azonnal megtörténjen, még akkor is, ha kivétel történik. Ilyen törlésre példa az, ha közvetlenül a használat után hívja Close FileStream meg az objektumot ahelyett, hogy arra várna, hogy a közös nyelvi futtatókörnyezet által összegyűjtött szemét legyen, az alábbiak szerint:
static void CodeWithoutCleanup()
{
FileStream? file = null;
FileInfo fileInfo = new FileInfo("./file.txt");
file = fileInfo.OpenWrite();
file.WriteByte(0xF);
file.Close();
}
Példa
Az előző kód utasítássá alakításához try-catch-finally a törlési kód a következőképpen lesz elválasztva a munkakódtól.
static void CodeWithCleanup()
{
FileStream? file = null;
FileInfo? fileInfo = null;
try
{
fileInfo = new FileInfo("./file.txt");
file = fileInfo.OpenWrite();
file.WriteByte(0xF);
}
catch (UnauthorizedAccessException e)
{
Console.WriteLine(e.Message);
}
finally
{
file?.Close();
}
}
Mivel a hívás előtt OpenWrite() bármikor előfordulhat kivétel a try blokkon belül, vagy maga a OpenWrite() hívás meghiúsulhat, nem garantáljuk, hogy a fájl meg van nyitva, amikor megpróbáljuk bezárni. A finally blokk egy ellenőrzést ad hozzá annak ellenőrzéséhez, hogy az FileStream objektum nem null szerepel-e a metódus meghívása Close előtt. Az ellenőrzés nélkül a null finally blokk a sajátját NullReferenceExceptionis eldobhatja, de ha lehetséges, kerülni kell a kivételeket a blokkokban finally .
Az adatbázis-kapcsolat egy másik jó lehetőség arra, hogy egy blokkban finally lezárják. Mivel az adatbázis-kiszolgálóhoz engedélyezett kapcsolatok száma néha korlátozott, a lehető leggyorsabban be kell zárnia az adatbázis-kapcsolatokat. Ha kivételt jelez a kapcsolat bezárása előtt, a finally blokk használata jobb, mint a szemétgyűjtésre várni.