Bibliothèque de classes .NET Framework
CriticalFinalizerObject, classe

Mise à jour : novembre 2007

Garantit que tout le code de finalisation contenu dans les classes dérivées est marqué comme critique.

Espace de noms :  System.Runtime.ConstrainedExecution
Assembly :  mscorlib (dans mscorlib.dll)

Syntaxe

Visual Basic (Déclaration)
<ComVisibleAttribute(True)> _
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, UnmanagedCode := True)> _
Public MustInherit Class CriticalFinalizerObject
Visual Basic (Utilisation)
Dim instance As CriticalFinalizerObject
C#
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, UnmanagedCode = true)]
public abstract class CriticalFinalizerObject
VisualC++
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, UnmanagedCode = true)]
public ref class CriticalFinalizerObject abstract
J#
/** @attribute ComVisibleAttribute(true) */
/** @attribute SecurityPermissionAttribute(SecurityAction.InheritanceDemand, UnmanagedCode = true) */
public abstract class CriticalFinalizerObject
JScript
public abstract class CriticalFinalizerObject
Notes

Les classes dérivant de la classe CriticalFinalizerObject sont traitées implicitement comme une région d'exécution limitée. Ceci nécessite que le code dans le finaliseur n'appelle que du code avec un contrat de fiabilité fort. Pour plus d'informations sur les régions d'exécution limitées, consultez l'espace de noms System.Runtime.ConstrainedExecution.

Dans les classes dérivées de la classe CriticalFinalizerObject, le Common Language Runtime (CLR) garantit que tout le code de finalisation critique aura l'occasion de s'exécuter, à condition que le finaliseur respecte les règles d'une région d'exécution limitée, même dans les situations où le CLR décharge un domaine d'application ou abandonne un thread de force. Si un finaliseur ne respecte pas les règles d'une région d'exécution limitée, il peut ne pas s'exécuter correctement. De plus, le CLR établit un ordonnancement faible parmi les finaliseurs normaux et critiques : pour les objets libérés simultanément par le garbage collection, l'ensemble des finaliseurs non critiques est appelé avant tout finaliseur critique. Par exemple, une classe telle que FileStream, qui contient des données dans la classe SafeHandle qui est dérivée de CriticalFinalizerObject, peut exécuter un finaliseur standard pour nettoyer des données mises en mémoire tampon existantes.

Dans la plupart des cas, vous ne devez pas écrire e classes qui dérivent de la classe CriticalFinalizerObject. La bibliothèque de classes .NET Framework fournit deux classes (SafeHandle et CriticalHandle) qui proposent des fonctionnalités de finalisation critiques pour les ressources de handle. En outre, le .NET Framework fournit un jeu de classes dérivé de la classe SafeHandle, et ce jeu est localisé dans l'espace de noms Microsoft.Win32.SafeHandles. Ces classes sont conçues pour proposer les fonctionnalités courantes de prise en charge des handles de fichiers et de systèmes d'exploitation.

Exemples

L'exemple de code suivant illustre l'utilisation de la classe SafeFileHandle afin de fournir la finalisation critique pour les flux d'entrée et de sortie standard. SafeFileHandle, dérivé de la classe SafeHandle, est passé au flux de fichiers dans le constructeur FileStream.

C#
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;
                }
            }
        }

    }
}
Autorisations

Hiérarchie d'héritage

System..::.Object
  System.Runtime.ConstrainedExecution..::.CriticalFinalizerObject
    System.Runtime.InteropServices..::.CriticalHandle
    System.Runtime.InteropServices..::.SafeHandle
    System.Runtime..::.MemoryFailPoint
    System.Security..::.SecureString
    System.Threading..::.ReaderWriterLock
    System.Threading..::.Thread
Sécurité des threads

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.
Plateformes

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Informations de version

.NET Framework

Pris en charge dans : 3.5, 3.0, 2.0
Voir aussi

Référence

Autres ressources

Mots clés :


Page view tracker