Cliquez pour évaluer et commenter
MSDN
MSDN Library
Développement .NET
.NET Framework 3.5
.NET Framework
Bibliothèque de classes ....
Réduire tout/Développer tout Réduire tout
Cette page est spécifique à
Microsoft Visual Studio 2008/.NET Framework 3.5

D'autres versions sont également disponibles pour :
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)

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

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.

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

    }
}
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.

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.

.NET Framework

Pris en charge dans : 3.5, 3.0, 2.0
Contenu de la communauté   Qu'est-ce que le Contenu de la communauté ?
Ajouter du contenu RSS  Annotations
Processing
© 2009 Microsoft Corporation. Tous droits réservés. Conditions d'utilisation | Marques | Confidentialité
Page view tracker