CriticalFinalizerObject Kelas

Definisi

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)

Berlaku untuk

Lihat juga