CriticalFinalizerObject Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Memastikan bahwa semua kode finalisasi dalam kelas turunan ditandai sebagai kritis.
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
- Warisan
-
CriticalFinalizerObject
- Turunan
- Atribut
Contoh
Contoh kode berikut menunjukkan penggunaan SafeFileHandle kelas untuk memberikan finalisasi penting untuk aliran input dan output standar. SafeFileHandle, berasal dari SafeHandle kelas , diteruskan ke aliran file di FileStream konstruktor.
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
Keterangan
Kelas yang berasal dari CriticalFinalizerObject kelas secara implisit diperlakukan sebagai wilayah eksekusi terkendala (CER). Ini memerlukan kode di finalizer untuk hanya memanggil kode dengan kontrak keandalan yang kuat. Untuk informasi selengkapnya tentang CER, lihat System.Runtime.ConstrainedExecution namespace layanan.
Dalam kelas yang berasal dari CriticalFinalizerObject kelas , runtime bahasa umum (CLR) menjamin bahwa semua kode finalisasi penting akan diberikan kesempatan untuk dijalankan, asalkan finalizer mengikuti aturan untuk CER, bahkan dalam situasi di mana CLR secara paksa membongkar domain aplikasi atau membatalkan utas. Jika finalizer melanggar aturan untuk CER, mungkin tidak berhasil dijalankan. Selain itu, CLR menetapkan urutan yang lemah di antara finalizer normal dan kritis: untuk objek yang direklamasi kembali oleh pengumpulan sampah pada saat yang sama, semua finalizer noncritical dipanggil sebelum salah satu finalizer penting. Misalnya, kelas seperti FileStream, yang menyimpan data di SafeHandle kelas yang berasal dari CriticalFinalizerObject, dapat menjalankan finalizer standar untuk menghapus data buffer yang ada.
Dalam kebanyakan kasus, Anda tidak perlu menulis kelas yang berasal dari CriticalFinalizerObject kelas . Pustaka kelas .NET Framework menyediakan dua kelas, SafeHandle dan CriticalHandle, yang menyediakan fungsionalitas finalisasi penting untuk menangani sumber daya. Selain itu, .NET Framework menyediakan sekumpulan kelas prewritten yang berasal dari kelas SafeHandle, dan set ini terletak di namespace Microsoft.Win32.SafeHandles. Kelas-kelas ini dirancang untuk menyediakan fungsionalitas umum untuk mendukung file dan handel sistem operasi.
Konstruktor
| Nama | Deskripsi |
|---|---|
| CriticalFinalizerObject() |
Menginisialisasi instans baru dari kelas CriticalFinalizerObject. |
Metode
| Nama | Deskripsi |
|---|---|
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
| Finalize() |
Merilis semua sumber daya yang digunakan oleh CriticalFinalizerObject kelas . |
| GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |