CriticalFinalizerObject Třída

Definice

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

public ref class CriticalFinalizerObject abstract
public abstract class CriticalFinalizerObject
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObject
type CriticalFinalizerObject = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type CriticalFinalizerObject = class
Public MustInherit Class CriticalFinalizerObject
Dědičnost
CriticalFinalizerObject
Odvozené
Atributy

Příklady

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

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;
                }
            }
        }
    }
}
Imports System.Runtime.InteropServices
Imports System.IO
Imports Microsoft.Win32.SafeHandles

Public Module Example
   Const STD_INPUT_HANDLE As Integer  = -10
   Const STD_OUTPUT_HANDLE As Integer = -11
   Const STD_ERROR_HANDLE As Integer  = -12

   Public Declare Auto Function GetStdHandle Lib "Kernel32" (type As Integer) As IntPtr

   Public Sub Main()
      Dim fsIn As FileStream = Nothing
      Dim fsOut As FileStream = Nothing

      Try
         Dim sfhIn As New SafeFileHandle(GetStdHandle(STD_INPUT_HANDLE), False)
         fsIn = new FileStream(sfhIn, FileAccess.Read)
         Dim input() As Byte = { 0 }
         fsIn.Read(input, 0, 1)
         Dim sfhOut As New SafeFileHandle(GetStdHandle(STD_OUTPUT_HANDLE), False)
         fsOut = New FileStream(sfhOut, FileAccess.Write)
         fsOut.Write(input, 0, 1)
         Dim sf As SafeFileHandle = fsOut.SafeFileHandle
      Finally
         If fsIn IsNot Nothing Then
            fsIn.Close()
            fsIn = Nothing
         End If
         If fsOut IsNot Nothing Then 
            fsOut.Close()
            fsOut = Nothing
         End If
      End Try
   End Sub
End Module

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 kód v finalizátoru, aby volal pouze kód se silným kontraktem spolehlivosti. Další informace o CERs naleznete v System.Runtime.ConstrainedExecution oboru názvů.

Ve třídách odvozených z CriticalFinalizerObject této třídy modul clr (Common Language Runtime) zaručuje, že všem důležitým finalizačním kódu bude udělena možnost provést, za předpokladu, že finalizátor dodržuje pravidla pro CER, a to i v situacích, kdy CLR vynuceně uvolní doménu aplikace nebo přeruší vlákno. Pokud finalizátor porušuje pravidla cer, nemusí se úspěšně provést. Kromě toho CLR vytváří slabé pořadí mezi normálními a kritickými finalizátory: pro objekty uvolněné uvolňováním paměti současně se všechny nekritické finalizátory volají před některým z kritických finalizátorů. Například třída, která FileStreamobsahuje 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ů nemusíte psát třídy, které jsou odvozeny od CriticalFinalizerObject třídy. Knihovna tříd .NET Framework poskytuje dvě třídy, SafeHandle a CriticalHandle, které poskytují důležité finalizační funkce pro zpracování prostředků. Kromě toho .NET Framework poskytuje sadu prepsaných tříd odvozených z třídy SafeHandle a tato sada se nachází v oboru názvů Microsoft.Win32.SafeHandles. Tyto třídy jsou navržené tak, aby poskytovaly běžné funkce pro podpůrné popisovače souborů a operačního systému.

Konstruktory

Name Description
CriticalFinalizerObject()

Inicializuje novou instanci CriticalFinalizerObject třídy.

Metody

Name Description
Equals(Object)

Určuje, zda je zadaný objekt roven 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í funkce hash.

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

Získá Type aktuální instance.

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

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

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

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

(Zděděno od Object)

Platí pro

Viz také