CriticalFinalizerObject Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Assegura que todo o código de finalização nas classes derivadas é marcado como crítico.
public ref class CriticalFinalizerObject abstract
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObject
public abstract class CriticalFinalizerObject
[<System.Runtime.InteropServices.ComVisible(true)>]
type CriticalFinalizerObject = class
type CriticalFinalizerObject = class
Public MustInherit Class CriticalFinalizerObject
- Herança
-
CriticalFinalizerObject
- Derivado
- Atributos
Exemplos
O seguinte exemplo de código mostra a utilização da SafeFileHandle classe para fornecer finalização crítica dos fluxos padrão de entrada e saída. O SafeFileHandle, derivado da SafeHandle classe, é passado para o fluxo de ficheiros no FileStream construtor.
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
Observações
As classes derivadas da CriticalFinalizerObject classe são implicitamente tratadas como uma região de execução restrita (CER). Isto exige que o código no finalizador apenas chame código com um contrato de fiabilidade forte. Para mais informações sobre CERs, consulte o System.Runtime.ConstrainedExecution namespace.
Em classes derivadas da CriticalFinalizerObject classe, o tempo de execução da common language (CLR) garante que todo o código crítico de finalização terá a oportunidade de ser executado, desde que o finalizador siga as regras de uma CER, mesmo em situações em que o CLR descarrega forçadamente um domínio de aplicação ou aborta uma thread. Se um finalizador violar as regras de um CER, pode não ser executado com sucesso. Além disso, o CLR estabelece uma ordenação fraca entre finalizadores normais e críticos: para objetos recuperados por recolha de lixo ao mesmo tempo, todos os finalizadores não críticos são chamados antes de qualquer um dos finalizadores críticos. Por exemplo, uma classe como FileStream, que armazena dados na SafeHandle classe derivados de CriticalFinalizerObject, pode executar um finalizador padrão para limpar dados em buffer existentes.
Na maioria dos casos, não precisa de escrever classes que derivam da CriticalFinalizerObject classe. .NET biblioteca de classes Framework fornece duas classes, SafeHandle e CriticalHandle, que fornecem funcionalidades críticas de finalização para recursos de controlo. Além disso, .NET Framework fornece um conjunto de classes pré-escritas derivadas da classe SafeHandle, e este conjunto está localizado no espaço de nomes Microsoft.Win32.SafeHandles. Estas classes foram concebidas para fornecer funcionalidades comuns para suportar handles de ficheiros e sistemas operativos.
Construtores
| Name | Description |
|---|---|
| CriticalFinalizerObject() |
Inicializa uma nova instância da CriticalFinalizerObject classe. |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| Finalize() |
Liberta todos os recursos usados pela CriticalFinalizerObject turma. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |