CriticalFinalizerObject CriticalFinalizerObject CriticalFinalizerObject CriticalFinalizerObject Class

Definición

Garantiza que todo el código de finalización en clases derivadas se marca como crítico.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
Herencia
CriticalFinalizerObjectCriticalFinalizerObjectCriticalFinalizerObjectCriticalFinalizerObject
Derivado
Atributos

Ejemplos

En el ejemplo de código siguiente se muestra el SafeFileHandle uso de la clase para proporcionar una finalización crítica para los flujos de entrada y salida estándar.The following code example shows the use of the SafeFileHandle class to provide critical finalization for the standard input and output streams. , Derivado de la SafeHandle clase, se pasa a la secuencia de archivo en el FileStream constructor. SafeFileHandleThe 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

Comentarios

Las clases que se derivan de la CriticalFinalizerObject clase se tratan implícitamente como una región de ejecución restringida (CER).Classes deriving from the CriticalFinalizerObject class are implicitly treated as a constrained execution region (CER). Esto requiere que el código del finalizador solo llame al código con un contrato de confiabilidad seguro.This requires code in the finalizer to only call code with a strong reliability contract. Para obtener más información acerca de las CER System.Runtime.ConstrainedExecution , vea el espacio de nombres.For more information about CERs, see the System.Runtime.ConstrainedExecution namespace.

En las clases derivadas CriticalFinalizerObject de la clase, el Common Language Runtime (CLR) garantiza que todo el código de finalización crítico tendrá la oportunidad de ejecutarse, siempre que el finalizador siga las reglas de una CER, incluso en situaciones en las que el CLR descarga forzosamente un dominio de aplicación o anula un subproceso.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. Si un finalizador infringe las reglas de una CER, puede que no se ejecute correctamente.If a finalizer violates the rules for a CER, it might not successfully execute. Además, CLR establece una ordenación débil entre los finalizadores normales y críticos: en el caso de los objetos reclamados por la recolección de elementos no utilizados al mismo tiempo, se llama a todos los finalizadores no críticos antes de cualquiera de los finalizadores críticos.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. Por ejemplo, una clase como FileStream, que contiene los datos de la SafeHandle clase que se deriva de CriticalFinalizerObject, puede ejecutar un finalizador estándar para vaciar los datos almacenados en búfer existentes.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.

En la mayoría de los casos, no es necesario escribir clases que derivan CriticalFinalizerObject de la clase.In most cases, you do not need to write classes that derive from the CriticalFinalizerObject class. La biblioteca de clases de .NET Framework proporciona dos SafeHandle clases CriticalHandle, y, que proporcionan la funcionalidad de finalización crítica para administrar los recursos.The .NET Framework class library provides two classes, SafeHandle and CriticalHandle, that provide critical finalization functionality for handle resources. Además, el .NET Framework proporciona un conjunto de clases escritas previamente derivadas SafeHandle de la clase y este conjunto se encuentra en Microsoft.Win32.SafeHandles el espacio de nombres.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. Estas clases están diseñadas para proporcionar una funcionalidad común para admitir identificadores de archivos y del sistema operativo.These classes are designed to provide common functionality for supporting file and operating system handles.

Constructores

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

Inicializa una nueva instancia de la clase CriticalFinalizerObject.Initializes a new instance of the CriticalFinalizerObject class.

Métodos

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

Determina si el objeto especificado es igual al objeto actual.Determines whether the specified object is equal to the current object.

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

Libera todos los recursos utilizados por la clase CriticalFinalizerObject.Releases all the resources used by the CriticalFinalizerObject class.

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

Sirve como la función hash predeterminada.Serves as the default hash function.

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

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

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

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

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

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Inherited from Object)

Seguridad

SecurityPermission
para obtener permiso para llamar a código no administrado.for permission to call unmanaged code. Acción de seguridad LinkDemand:.Security action: LinkDemand. Enumeración asociada:UnmanagedCodeAssociated enumeration: UnmanagedCode

InheritanceDemand
para plena confianza para los desarrolladores de herederos.for full trust for inheritors. Un código de confianza parcial no puede utilizar esta clase.This class cannot be used by partially trusted code.

Se aplica a

Consulte también: