CriticalFinalizerObject CriticalFinalizerObject CriticalFinalizerObject CriticalFinalizerObject Class

Definition

Stellt sicher, dass der gesamte Finalisierungscode in abgeleiteten Klassen als wichtig markiert wird.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
Vererbung
CriticalFinalizerObjectCriticalFinalizerObjectCriticalFinalizerObjectCriticalFinalizerObject
Abgeleitet
Attribute

Beispiele

Im folgenden Codebeispiel wird die Verwendung der- SafeFileHandle Klasse zum Bereitstellen einer kritischen Finalisierung für die standardmäßigen Eingabe-und Ausgabestreams veranschaulicht.The following code example shows the use of the SafeFileHandle class to provide critical finalization for the standard input and output streams. Der SafeFileHandle, der von der SafeHandle -Klasse abgeleitet wird, wird an FileStream den Dateistream im-Konstruktor übergeben.The 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

Hinweise

Klassen, die von CriticalFinalizerObject der-Klasse abgeleitet werden, werden implizit als eingeschränkter Ausführungs Bereich (CER) behandelt.Classes deriving from the CriticalFinalizerObject class are implicitly treated as a constrained execution region (CER). Dies erfordert, dass Code im Finalizer nur Code mit einem starken Zuverlässigkeits Vertrag aufruft.This requires code in the finalizer to only call code with a strong reliability contract. Weitere Informationen zu CERN finden Sie unter dem System.Runtime.ConstrainedExecution -Namespace.For more information about CERs, see the System.Runtime.ConstrainedExecution namespace.

In Klassen, die von CriticalFinalizerObject der-Klasse abgeleitet sind, gewährleistet der Common Language Runtime (CLR), dass allen kritischen Finalisierungscode die Ausführungs Chance erteilt wird, vorausgesetzt, der Finalizer befolgt die Regeln für einen CER, auch in Situationen, in denen die CLR das Entladen einer Anwendungsdomäne oder das Abbrechen eines Threads wird erzwungen.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. Wenn ein Finalizer gegen die Regeln eines CERs verstößt, kann er möglicherweise nicht erfolgreich ausgeführt werden.If a finalizer violates the rules for a CER, it might not successfully execute. Außerdem erstellt die CLR eine schwache Reihenfolge zwischen normalen und kritischen Finalizern: bei Objekten, die von Garbage Collection gleichzeitig freigegeben werden, werden alle nicht kritischen Finalizer vor den kritischen Finalizern aufgerufen.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. Beispielsweise kann eine-Klasse FileStream, die Daten in der SafeHandle -Klasse enthält, die von CriticalFinalizerObjectabgeleitet ist, einen Standard-Finalizer ausführen, um vorhandene gepufferte Daten auszuleeren.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.

In den meisten Fällen müssen Sie keine Klassen schreiben, die von der CriticalFinalizerObject -Klasse abgeleitet werden.In most cases, you do not need to write classes that derive from the CriticalFinalizerObject class. Die .NET Framework-Klassenbibliothek bietet zwei Klassen SafeHandle , CriticalHandleund, die eine wichtige Abschluss Funktion für die Behandlung von Ressourcen bereitstellen.The .NET Framework class library provides two classes, SafeHandle and CriticalHandle, that provide critical finalization functionality for handle resources. Darüber hinaus stellt der .NET Framework einen Satz vorgeschriebener Klassen bereit, die SafeHandle von der-Klasse abgeleitet sind, und dieser Microsoft.Win32.SafeHandles Satz befindet sich im-Namespace.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. Diese Klassen sind so konzipiert, dass Sie allgemeine Funktionen zum unterstützen von Datei-und Betriebssystem Handles bereitstellen.These classes are designed to provide common functionality for supporting file and operating system handles.

Konstruktoren

CriticalFinalizerObject() CriticalFinalizerObject() CriticalFinalizerObject() CriticalFinalizerObject()

Initialisiert eine neue Instanz der CriticalFinalizerObject-Klasse.Initializes a new instance of the CriticalFinalizerObject class.

Methoden

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

Gibt alle von der CriticalFinalizerObject-Klasse verwendeten Ressourcen frei.Releases all the resources used by the CriticalFinalizerObject class.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Sicherheit

SecurityPermission
für die Berechtigung zum Abrufen von nicht verwaltetem Code.for permission to call unmanaged code. Sicherheitsaktion: LinkDemand.Security action: LinkDemand. Zugehörige Enumeration:UnmanagedCodeAssociated enumeration: UnmanagedCode

InheritanceDemand
für vollständige Vertrauenswürdigkeit für Vererber.for full trust for inheritors. Diese Klasse kann von teilweise vertrauenswürdigem Code nicht verwendet werden.This class cannot be used by partially trusted code.

Gilt für:

Siehe auch