CriticalFinalizerObject CriticalFinalizerObject CriticalFinalizerObject CriticalFinalizerObject Class


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

public ref class CriticalFinalizerObject abstract
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. SafeFileHandleから派生した、SafeHandleクラス、ファイル ストリームに渡される、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ことすべてクリティカル ファイナライズ コードに与えられるを実行する機会、ファイナライザーの状況であっても、CER の規則に従った提供クラス、共通言語ランタイム (CLR) により、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. などのクラスなど、 FileStream、内のデータを保持する、SafeHandleクラスから派生したCriticalFinalizerObject、バッファー内の既存のデータをフラッシュする標準のファイナライザーを実行することができます。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 クラス ライブラリは、2 つのクラスを提供します。SafeHandleCriticalHandle、ハンドル リソースのクリティカル ファイナライズの機能を提供します。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() CriticalFinalizerObject() CriticalFinalizerObject() CriticalFinalizerObject()

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


Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

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

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetType() GetType() GetType() GetType()

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

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
ToString() ToString() ToString() ToString()

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

(Inherited from Object)


アンマネージ コードを呼び出すアクセス許可。for permission to call unmanaged code. セキュリティ アクション:LinkDemandします。Security action: LinkDemand. 関連付けられた列挙体。 UnmanagedCodeAssociated enumeration: UnmanagedCode

継承クラスの完全な信頼。for full trust for inheritors. このクラスは、部分的に信頼されたコードでは使用できません。This class cannot be used by partially trusted code.