CriticalFinalizerObject Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Zajišťuje, že veškerý kód finalizace v odvozených třídách je označen jako kritický.
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
- Dědičnost
-
CriticalFinalizerObject
- Odvozené
- Atributy
Příklady
Následující příklad kódu ukazuje použití SafeFileHandle třídy k zajištění kritické finalizace pro standardní vstupní a výstupní datové proudy. , SafeFileHandleodvozený z SafeHandle třídy , je předán do datového proudu souboru v konstruktoru 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
Poznámky
Třídy odvozené z CriticalFinalizerObject třídy jsou implicitně považovány za oblast omezeného provádění (CER). To vyžaduje, aby kód v finalizačním procesu volal pouze kód se silným kontraktem spolehlivosti. Další informace o CER najdete v System.Runtime.ConstrainedExecution tématu obor názvů.
Ve třídách odvozených z CriticalFinalizerObject třídy common language runtime (CLR) zaručuje, že všechny kritické finalizační kódy budou mít možnost provést, za předpokladu, že finalizační proces dodržuje pravidla pro CER, a to i v situacích, kdy CLR vynuceně uvolní doménu aplikace nebo přeruší vlákno. Pokud finalizační procedura porušuje pravidla pro cer, nemusí se úspěšně spustit. Kromě toho CLR stanoví slabé pořadí mezi normálními a kritickými finalizátory: pro objekty uvolněné uvolňováním paměti ve stejnou dobu jsou všechny nekritické finalizační metody volána před jakoukoli kritickou finalizační metodou. Například třída , FileStreamjako je , která obsahuje data ve SafeHandle třídě odvozené z CriticalFinalizerObject, může spustit standardní finalizační metodu pro vyprázdnění existujících dat ve vyrovnávací paměti.
Ve většině případů není nutné psát třídy, které jsou odvozeny CriticalFinalizerObject z třídy . Knihovna tříd rozhraní .NET Framework poskytuje dvě třídy, SafeHandle a CriticalHandle, které poskytují kritické finalizační funkce pro zpracování prostředků. Kromě toho rozhraní .NET Framework poskytuje sadu předpsaných tříd odvozených z SafeHandle třídy a tato sada se nachází v Microsoft.Win32.SafeHandles oboru názvů . Tyto třídy jsou navrženy tak, aby poskytovaly běžné funkce pro podporu souborů a popisovačů operačního systému.
Konstruktory
CriticalFinalizerObject() |
Inicializuje novou instanci CriticalFinalizerObject třídy . |
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
Finalize() |
Uvolní všechny prostředky používané CriticalFinalizerObject třídou . |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |