CriticalFinalizerObject Třída

Definice

Zajistí, že veškerý kód finalizace v odvozených třídách je označen jako kritický.Ensures that all finalization code in derived classes is marked as critical.

public ref class CriticalFinalizerObject abstract
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObject
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 pro zajištění kritického dokončení pro standardní vstupní a výstupní proudy.The following code example shows the use of the SafeFileHandle class to provide critical finalization for the standard input and output streams. Třída odvozená z třídy je předána streamu souboru v FileStream konstruktoru. SafeFileHandle SafeHandleThe SafeFileHandle, derived from the SafeHandle class, is passed to the file stream in the FileStream constructor.

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é od CriticalFinalizerObject třídy jsou implicitně zpracovány jako omezení oblasti provádění (CER).Classes deriving from the CriticalFinalizerObject class are implicitly treated as a constrained execution region (CER). To vyžaduje kód v finalizační metodě pro volání pouze kódu se silným kontraktem spolehlivosti.This requires code in the finalizer to only call code with a strong reliability contract. Další informace o CERs naleznete v tématu System.Runtime.ConstrainedExecution obor názvů.For more information about CERs, see the System.Runtime.ConstrainedExecution namespace.

V třídách, které CriticalFinalizerObject jsou odvozeny od třídy, modul CLR (Common Language Runtime) zaručuje, že všechny kritické kódy finalizace budou mít možnost provést. za předpokladu, že finalizační metoda bude postupovat podle pravidel pro CER, dokonce i v situacích, kdy CLR vynutí uvolnění domény aplikace nebo přerušení vlákna.In classes derived from the CriticalFinalizerObject class, the common language runtime (CLR) guarantees that all critical finalization code will be given the opportunity to execute, provided the finalizer follows the rules for a CER, even in situations where the CLR forcibly unloads an application domain or aborts a thread. Pokud finalizační metoda porušuje pravidla pro CER, nemusí se úspěšně spustit.If a finalizer violates the rules for a CER, it might not successfully execute. Kromě toho vytváří modul CLR slabé řazení mezi normálním a kritickým finalizační serverem: pro objekty, které jsou vyvolány uvolňováním paměti současně, jsou všechny nekritické finalizační metody volány před jakýmkoli kritickým finalizační modulem.In addition, the CLR establishes a weak ordering among normal and critical finalizers: for objects reclaimed by garbage collection at the same time, all the noncritical finalizers are called before any of the critical finalizers. Například třída FileStream, která obsahuje data SafeHandle ve třídě, která je odvozena z CriticalFinalizerObject, může spustit standardní finalizační metodu pro vyprázdnění existujících dat v bufferu.For example, a class such as FileStream, which holds data in the SafeHandle class that is derived from CriticalFinalizerObject, can run a standard finalizer to flush out existing buffered data.

Ve většině případů nemusíte psát třídy, které jsou odvozeny z CriticalFinalizerObject třídy.In most cases, you do not need to write classes that derive from the CriticalFinalizerObject class. Knihovna tříd .NET Framework poskytuje dvě třídy, SafeHandle CriticalHandlekteré poskytují kritickou funkčnost pro zpracování prostředků.The .NET Framework class library provides two classes, SafeHandle and CriticalHandle, that provide critical finalization functionality for handle resources. Kromě toho .NET Framework poskytuje sadu předpsaných tříd odvozených z SafeHandle třídy a tato sada je umístěna Microsoft.Win32.SafeHandles v oboru názvů.Furthermore, the .NET Framework provides a set of prewritten classes derived from the SafeHandle class, and this set is located in the Microsoft.Win32.SafeHandles namespace. Tyto třídy jsou navržené tak, aby poskytovaly společné funkce pro podporu obslužných rutin souborů a operačních systémů.These classes are designed to provide common functionality for supporting file and operating system handles.

Konstruktory

CriticalFinalizerObject()

Inicializuje novou instanci třídy CriticalFinalizerObject třídy.Initializes a new instance of the CriticalFinalizerObject class.

Metody

Equals(Object)

Určuje, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

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

Uvolní všechny prostředky používané CriticalFinalizerObject třídou.Releases all the resources used by the CriticalFinalizerObject class.

GetHashCode()

Slouží jako výchozí funkce hash.Serves as the default hash function.

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

Získá Type aktuální instance.Gets the Type of the current instance.

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

Vytvoří kopii aktuálního Objectbez podstruktury.Creates a shallow copy of the current Object.

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

Vrací řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

(Zděděno od Object)

Zabezpečení

SecurityPermission
pro oprávnění k volání nespravovaného kódu.for permission to call unmanaged code. Akce zabezpečení: LinkDemand.Security action: LinkDemand. Přidružený výčet:UnmanagedCodeAssociated enumeration: UnmanagedCode

InheritanceDemand
pro úplný vztah důvěryhodnosti pro dědicefor full trust for inheritors. Tato třída nemůže být použita částečně důvěryhodným kódem.This class cannot be used by partially trusted code.

Platí pro

Viz také