CriticalFinalizerObject Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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) |