CriticalFinalizerObject Klasa

Definicja

Zapewnia, że wszystkie kody finalizowania w klasach pochodnych są oznaczone jako krytyczne.Ensures that all finalization code in derived classes is marked as critical.

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
Dziedziczenie
CriticalFinalizerObject
Pochodne
Atrybuty

Przykłady

Poniższy przykład kodu pokazuje użycie SafeFileHandle klasy w celu zapewnienia krytycznej finalizacji strumieni danych wejściowych i wyjściowych.The following code example shows the use of the SafeFileHandle class to provide critical finalization for the standard input and output streams. SafeFileHandlePochodna z SafeHandle klasy jest przenoszona do strumienia pliku w FileStream konstruktorze.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

Uwagi

Klasy pochodne z CriticalFinalizerObject klasy są niejawnie traktowane jako region ograniczonego wykonania (CER).Classes deriving from the CriticalFinalizerObject class are implicitly treated as a constrained execution region (CER). Wymaga to kodu w finalizatorze tylko do wywoływania kodu z silną umową niezawodności.This requires code in the finalizer to only call code with a strong reliability contract. Aby uzyskać więcej informacji na temat CERs, zobacz System.Runtime.ConstrainedExecution przestrzeń nazw.For more information about CERs, see the System.Runtime.ConstrainedExecution namespace.

W klasach pochodzących od CriticalFinalizerObject klasy, środowisko uruchomieniowe języka wspólnego (CLR) gwarantuje, że wszystkie krytyczne kod finalizacji będzie miał możliwość wykonania, pod warunkiem, że finalizator postępuje zgodnie z regułami dla cer, nawet w sytuacjach, gdy środowisko CLR wymusić odładowanie domeny aplikacji lub przerwanie wątku.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. Jeśli finalizator narusza reguły dla programu CER, może nie zostać pomyślnie wykonany.If a finalizer violates the rules for a CER, it might not successfully execute. Ponadto środowisko CLR zapewnia słabe porządkowanie między normalnymi i krytycznymi finalizatorami: w przypadku obiektów odzyskiwanych przez wyrzucanie elementów bezużytecznych w tym samym czasie wszystkie niekrytyczne finalizatory są wywoływane przed którymkolwiek z najważniejszych finalizatorów.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. Na przykład Klasa, taka jak FileStream , która przechowuje dane w SafeHandle klasie pochodzącej z CriticalFinalizerObject , może uruchamiać standardowy finalizator, aby opróżnić istniejące dane buforowane.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.

W większości przypadków nie trzeba pisać klas, które pochodzą od CriticalFinalizerObject klasy.In most cases, you do not need to write classes that derive from the CriticalFinalizerObject class. Biblioteka klas .NET Framework udostępnia dwie klasy SafeHandle i CriticalHandle , które zapewniają krytyczne funkcje finalizowania obsługi zasobów.The .NET Framework class library provides two classes, SafeHandle and CriticalHandle, that provide critical finalization functionality for handle resources. Ponadto .NET Framework dostarcza zestaw klas prepisanych, pochodzących od SafeHandle klasy, i ten zestaw znajduje się w Microsoft.Win32.SafeHandles przestrzeni nazw.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. Te klasy zostały zaprojektowane w celu zapewnienia typowych funkcji obsługi plików i obsługi systemu operacyjnego.These classes are designed to provide common functionality for supporting file and operating system handles.

Konstruktory

CriticalFinalizerObject()

Inicjuje nowe wystąpienie klasy CriticalFinalizerObject.Initializes a new instance of the CriticalFinalizerObject class.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
Finalize()

Zwalnia wszystkie zasoby używane przez CriticalFinalizerObject klasę.Releases all the resources used by the CriticalFinalizerObject class.

GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżące wystąpienie.Gets the Type of the current instance.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.Returns a string that represents the current object.

(Odziedziczone po Object)

Dotyczy

Zobacz też