C# · Avançado · Inglês · Técnico
SafeHandle
Classe base abstrata que encapsula um handle de recurso nativo com contagem de referência e liberação confiável via ReleaseHandle, mesmo diante de exceções e finalização.
Onde usar
Aparece em interop e P/Invoke, onde um IntPtr cru vazaria o recurso se esquecido. Funções importadas podem devolver SafeHandle em vez de IntPtr, e o finalizador crítico garante o fechamento.
Em código
using Microsoft.Win32.SafeHandles;
class Meu : SafeHandleZeroOrMinusOneIsInvalid
{
public Meu() : base(true) { }
protected override bool ReleaseHandle()
=> true; // aqui fecharia o handle nativo
}Exemplos
Wrap the native handle in a SafeHandle.
Envolva o handle nativo em um SafeHandle.
A SafeHandle guarantees the handle gets released.
Um SafeHandle garante que o handle seja liberado.
Cuidado
Não guarde handles nativos em IntPtr dentro de classes com finalizador manual: ficam sujeitos a corridas e vazamentos que o SafeHandle evita.
Antônimos
IntPtr