CriticalFinalizerObject クラス


派生クラスのすべての終了コードが確実に重大であるとマークされるようにします。Ensures that all finalization code in derived classes is marked as critical.

public ref class CriticalFinalizerObject abstract
public abstract class CriticalFinalizerObject
public abstract class CriticalFinalizerObject
type CriticalFinalizerObject = class
Public MustInherit Class CriticalFinalizerObject

次のコード例は、SafeFileHandle クラスを使用して、標準の入力ストリームと出力ストリームに対して重大な終了処理を提供する方法を示しています。The following code example shows the use of the SafeFileHandle class to provide critical finalization for the standard input and output streams. SafeHandle クラスから派生した SafeFileHandleは、FileStream コンストラクターのファイルストリームに渡されます。The SafeFileHandle, derived from the SafeHandle class, is passed to the file stream in the FileStream constructor.

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;
                SafeFileHandle sfhIn = new SafeFileHandle(GetStdHandle(STD_INPUT_HANDLE), false);
                fsIn = new FileStream(sfhIn, FileAccess.Read);
                byte[] input = new byte[] {0};
                SafeFileHandle sfhOut = new SafeFileHandle(GetStdHandle(STD_OUTPUT_HANDLE), false);
                fsOut = new FileStream(sfhOut, FileAccess.Write);
                SafeFileHandle sf = fsOut.SafeFileHandle;
                if (fsIn != null)
                    fsIn = null;
                if (fsOut != null)
                    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

         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
         If fsIn IsNot Nothing Then
            fsIn = Nothing
         End If
         If fsOut IsNot Nothing Then 
            fsOut = Nothing
         End If
      End Try
   End Sub
End Module


CriticalFinalizerObject クラスから派生したクラスは、制約された実行領域 (CER) として暗黙的に処理されます。Classes deriving from the CriticalFinalizerObject class are implicitly treated as a constrained execution region (CER). これには、厳密な信頼性コントラクトでコードを呼び出すために、ファイナライザーのコードが必要です。This requires code in the finalizer to only call code with a strong reliability contract. Cer の詳細については、「System.Runtime.ConstrainedExecution 名前空間」を参照してください。For more information about CERs, see the System.Runtime.ConstrainedExecution namespace.

CriticalFinalizerObject クラスから派生したクラスでは、CLR がアプリケーションドメインを強制的にアンロードしたり、スレッドを中止したりする場合でも、ファイナライザーが CER の規則に従う場合は、共通言語ランタイム (CLR) によって、すべてのクリティカルな終了コードが実行されるように保証されます。In classes derived from the CriticalFinalizerObject class, the common language runtime (CLR) guarantees that all critical finalization code will be given the opportunity to execute, provided the finalizer follows the rules for a CER, even in situations where the CLR forcibly unloads an application domain or aborts a thread. ファイナライザーが CER の規則に違反している場合は、正常に実行されない可能性があります。If a finalizer violates the rules for a CER, it might not successfully execute. さらに、CLR は、通常のファイナライザーと重大なファイナライザーの間に弱い順序を確立します。ガベージコレクションによって同時に解放されたオブジェクトの場合は、すべての重要でないファイナライザーがすべてのクリティカルファイナライザーの前に呼び出されます。In addition, the CLR establishes a weak ordering among normal and critical finalizers: for objects reclaimed by garbage collection at the same time, all the noncritical finalizers are called before any of the critical finalizers. たとえば、CriticalFinalizerObjectから派生した SafeHandle クラスのデータを保持する FileStreamなどのクラスでは、標準のファイナライザーを実行して、既存のバッファーデータをフラッシュできます。For example, a class such as FileStream, which holds data in the SafeHandle class that is derived from CriticalFinalizerObject, can run a standard finalizer to flush out existing buffered data.

ほとんどの場合、CriticalFinalizerObject クラスから派生するクラスを記述する必要はありません。In most cases, you do not need to write classes that derive from the CriticalFinalizerObject class. .NET Framework クラスライブラリには、SafeHandleCriticalHandleの2つのクラスが用意されており、リソースを処理するための重要な終了機能を提供します。The .NET Framework class library provides two classes, SafeHandle and CriticalHandle, that provide critical finalization functionality for handle resources. さらに、.NET Framework には、SafeHandle クラスから派生した一連の記述済みクラスが用意されており、このセットは Microsoft.Win32.SafeHandles 名前空間にあります。Furthermore, the .NET Framework provides a set of prewritten classes derived from the SafeHandle class, and this set is located in the Microsoft.Win32.SafeHandles namespace. これらのクラスは、ファイルおよびオペレーティングシステムハンドルをサポートするための一般的な機能を提供するように設計されています。These classes are designed to provide common functionality for supporting file and operating system handles.



CriticalFinalizerObject クラスの新しいインスタンスを初期化します。Initializes a new instance of the CriticalFinalizerObject class.



指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判定します。Determines whether the specified object is equal to the current object.

(継承元 Object)

CriticalFinalizerObject クラスで使用されたすべてのリソースを解放します。Releases all the resources used by the CriticalFinalizerObject class.


既定のハッシュ関数として機能します。Serves as the default hash function.

(継承元 Object)

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(継承元 Object)

現在のオブジェクトを表す string を返します。Returns a string that represents the current object.

(継承元 Object)