CriticalFinalizerObject Osztály

Definíció

Biztosítja, hogy a származtatott osztályok összes véglegesítési kódja kritikusként legyen megjelölve.

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
Öröklődés
CriticalFinalizerObject
Származtatott
Attribútumok

Példák

Az alábbi példakód az osztály használatát mutatja be a SafeFileHandle standard bemeneti és kimeneti streamek kritikus véglegesítéséhez. A SafeFileHandlerendszer az SafeHandle osztályból származó fájlstreamet továbbítja a konstruktor fájlstreamjének FileStream .

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

Megjegyzések

Az osztályból CriticalFinalizerObject származó osztályok implicit módon korlátozott végrehajtási régióként (CER) vannak kezelve. Ehhez a véglegesítőben lévő kódra van szükség, hogy csak erős megbízhatósági szerződéssel rendelkező kódot hívjon meg. A CER-ekről további információt a névtérben System.Runtime.ConstrainedExecution talál.

Az osztályból származó osztályokban a CriticalFinalizerObject közös nyelvi futtatókörnyezet (CLR) garantálja, hogy az összes kritikus véglegesítési kód lehetőséget kap a végrehajtásra, feltéve, hogy a véglegesítő a CER szabályait követi, még akkor is, ha a CLR kényszerítetten eltávolít egy alkalmazástartományt, vagy megszakít egy szálat. Ha egy véglegesítő megsérti a CER szabályait, előfordulhat, hogy nem sikerül végrehajtani. Emellett a CLR gyenge sorrendet hoz létre a normál és kritikus döntősök között: a szemétgyűjtés által ugyanakkor visszanyert objektumok esetében az összes nem kritikus döntőst a kritikus döntősök előtt hívják meg. Egy olyan FileStreamosztály például, amely a SafeHandle származtatott CriticalFinalizerObjectosztály adatait tárolja, futtathat egy szabványos véglegesítőt a meglévő pufferelt adatok kiürítéséhez.

A legtöbb esetben nem kell az osztályból CriticalFinalizerObject származó osztályokat írnia. A .NET Keretrendszer osztálytár két osztályt biztosít, SafeHandle és CriticalHandle, amelyek kritikus fontosságú véglegesítési funkciókat biztosítanak az erőforrások kezeléséhez. A .NET-keretrendszer emellett a SafeHandle osztályból származó előre írt osztályok készletét is biztosítja, és ez a készlet a Microsoft.Win32.SafeHandles névtérben található. Ezek az osztályok úgy lettek kialakítva, hogy általános funkciókat biztosítsanak a fájl- és operációsrendszer-leírók támogatásához.

Konstruktorok

Name Description
CriticalFinalizerObject()

Inicializálja a CriticalFinalizerObject osztály új példányát.

Metódusok

Name Description
Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
Finalize()

Felszabadítja az osztály által használt összes erőforrást CriticalFinalizerObject .

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

A következőre érvényes:

Lásd még