CriticalFinalizerObject Třída

Definice

Zajišťuje, že veškerý kód finalizace v odvozených třídách je označen jako kritický.

C#
public abstract class CriticalFinalizerObject
C#
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObject
Dědičnost
CriticalFinalizerObject
Odvozené
Atributy

Příklady

Následující příklad kódu ukazuje použití SafeFileHandle třídy k zajištění kritické finalizace pro standardní vstupní a výstupní datové proudy. , SafeFileHandleodvozený z SafeHandle třídy , je předán do datového proudu souboru v konstruktoru FileStream .

C#
using System;
using System.Runtime.InteropServices;
using System.IO;
using Microsoft.Win32.SafeHandles;

namespace CriticalFinalizer
{
    class Program
    {
        const int STD_INPUT_HANDLE   = -10;
        const int STD_OUTPUT_HANDLE = -11;
        const int STD_ERROR_HANDLE  =  -12;
        [DllImport("Kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        public static extern IntPtr GetStdHandle(int type);

        static void Main(string[] args)
        {
            FileStream fsIn = null;
            FileStream fsOut = null;
            try
            {
                SafeFileHandle sfhIn = new SafeFileHandle(GetStdHandle(STD_INPUT_HANDLE), false);
                fsIn = new FileStream(sfhIn, FileAccess.Read);
                byte[] input = new byte[] {0};
                fsIn.Read(input,0,1);
                SafeFileHandle sfhOut = new SafeFileHandle(GetStdHandle(STD_OUTPUT_HANDLE), false);
                fsOut = new FileStream(sfhOut, FileAccess.Write);
                fsOut.Write(input,0,1);
                SafeFileHandle sf = fsOut.SafeFileHandle;
            }
            finally
            {
                if (fsIn != null)
                {
                    fsIn.Close();
                    fsIn = null;
                }
                if (fsOut != null)
                {
                    fsOut.Close();
                    fsOut = null;
                }
            }
        }
    }
}

Poznámky

Třídy odvozené z CriticalFinalizerObject třídy jsou implicitně považovány za oblast omezeného provádění (CER). To vyžaduje, aby kód v finalizačním procesu volal pouze kód se silným kontraktem spolehlivosti. Další informace o CER najdete v System.Runtime.ConstrainedExecution tématu obor názvů.

Ve třídách odvozených z CriticalFinalizerObject třídy common language runtime (CLR) zaručuje, že všechny kritické finalizační kódy budou mít možnost provést, za předpokladu, že finalizační proces dodržuje pravidla pro CER, a to i v situacích, kdy CLR vynuceně uvolní doménu aplikace nebo přeruší vlákno. Pokud finalizační procedura porušuje pravidla pro cer, nemusí se úspěšně spustit. Kromě toho CLR stanoví slabé pořadí mezi normálními a kritickými finalizátory: pro objekty uvolněné uvolňováním paměti ve stejnou dobu jsou všechny nekritické finalizační metody volána před jakoukoli kritickou finalizační metodou. Například třída , FileStreamjako je , která obsahuje data ve SafeHandle třídě odvozené z CriticalFinalizerObject, může spustit standardní finalizační metodu pro vyprázdnění existujících dat ve vyrovnávací paměti.

Ve většině případů není nutné psát třídy, které jsou odvozeny CriticalFinalizerObject z třídy . Knihovna tříd rozhraní .NET Framework poskytuje dvě třídy, SafeHandle a CriticalHandle, které poskytují kritické finalizační funkce pro zpracování prostředků. Kromě toho rozhraní .NET Framework poskytuje sadu předpsaných tříd odvozených z SafeHandle třídy a tato sada se nachází v Microsoft.Win32.SafeHandles oboru názvů . Tyto třídy jsou navrženy tak, aby poskytovaly běžné funkce pro podporu souborů a popisovačů operačního systému.

Konstruktory

CriticalFinalizerObject()

Inicializuje novou instanci CriticalFinalizerObject třídy .

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
Finalize()

Uvolní všechny prostředky používané CriticalFinalizerObject třídou .

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Produkt Verze
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

Viz také