CriticalFinalizerObject Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Türetilmiş sınıflardaki tüm sonlandırma kodunun kritik olarak işaretlenmesini sağlar.
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
- Devralma
-
CriticalFinalizerObject
- Türetilmiş
- Öznitelikler
Örnekler
Aşağıdaki kod örneği, standart giriş ve çıkış akışları için kritik sonlandırma sağlamak üzere sınıfının kullanımını SafeFileHandle gösterir. SafeFileHandlesınıfından SafeHandle türetilen , oluşturucudaki dosya akışına FileStream geçirilir.
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
Açıklamalar
sınıfından CriticalFinalizerObject türetilen sınıflar örtük olarak kısıtlanmış yürütme bölgesi (CER) olarak kabul edilir. Bunun için sonlandırıcıdaki kodun yalnızca güçlü bir güvenilirlik sözleşmesine sahip kodu çağırması gerekir. CER'ler hakkında daha fazla bilgi için ad alanına System.Runtime.ConstrainedExecution bakın.
Sınıfından CriticalFinalizerObject türetilen sınıflarda ortak dil çalışma zamanı (CLR), CLR'nin bir uygulama etki alanını zorla kaldırdığı veya iş parçacığını durdurduğu durumlarda bile sonlandırıcının CER kurallarını izlemesi koşuluyla tüm kritik sonlandırma kodunun yürütülmesine olanak tanıyacağını garanti eder. Sonlandırıcı bir CER kurallarını ihlal ederse, başarıyla yürütülmeyebilir. Buna ek olarak, CLR normal ve kritik sonlandırıcılar arasında zayıf bir sıralama oluşturur: aynı anda atık toplama tarafından geri kazanılmış nesneler için kritik olmayan sonlandırıcıların tümü kritik sonlandırıcılardan önce çağrılır. Örneğin, öğesinden CriticalFinalizerObjecttüretilen sınıftaki verileri SafeHandle tutan gibi FileStreambir sınıf, mevcut arabelleğe alınan verileri temizlemek için standart bir sonlandırıcı çalıştırabilir.
Çoğu durumda, sınıfından CriticalFinalizerObject türetilen sınıflar yazmanız gerekmez. .NET Framework sınıf kitaplığı, kaynakları işlemek için kritik sonlandırma işlevi sağlayan SafeHandle ve CriticalHandle iki sınıf sağlar. Ayrıca, .NET Framework SafeHandle sınıfından türetilmiş bir dizi önceden yazılmış sınıf sağlar ve bu küme Microsoft.Win32.SafeHandles ad alanında bulunur. Bu sınıflar, dosya ve işletim sistemi tanıtıcılarını desteklemek için ortak işlevler sağlamak üzere tasarlanmıştır.
Oluşturucular
| Name | Description |
|---|---|
| CriticalFinalizerObject() |
CriticalFinalizerObject sınıfının yeni bir örneğini başlatır. |
Yöntemler
| Name | Description |
|---|---|
| Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
| Finalize() |
sınıfı tarafından CriticalFinalizerObject kullanılan tüm kaynakları serbest bırakır. |
| GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
| GetType() |
Geçerli örneğin Type alır. (Devralındığı yer: Object) |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| ToString() |
Geçerli nesneyi temsil eden bir dize döndürür. (Devralındığı yer: Object) |