.NET Framework クラス ライブラリ
CriticalFinalizerObject クラス

更新 : 2007 年 11 月

派生クラスのすべての終了コードが確実に重大であるとマークされるようにします。

名前空間 :  System.Runtime.ConstrainedExecution
アセンブリ :  mscorlib (mscorlib.dll 内)

構文

Visual Basic (宣言)
<ComVisibleAttribute(True)> _
<SecurityPermissionAttribute(SecurityAction.InheritanceDemand, UnmanagedCode := True)> _
Public MustInherit Class CriticalFinalizerObject
Visual Basic (使用法)
Dim instance As CriticalFinalizerObject
C#
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, UnmanagedCode = true)]
public abstract class CriticalFinalizerObject
Visual C++
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, UnmanagedCode = true)]
public ref class CriticalFinalizerObject abstract
J#
/** @attribute ComVisibleAttribute(true) */
/** @attribute SecurityPermissionAttribute(SecurityAction.InheritanceDemand, UnmanagedCode = true) */
public abstract class CriticalFinalizerObject
JScript
public abstract class CriticalFinalizerObject
解説

CriticalFinalizerObject クラスから派生したクラスは、暗黙的に制約された実行領域 (CER) として扱われます。これにより、ファイナライザ内のコードには、信頼性が十分高いコントラクトを持つコードだけを呼び出すように要求されます。CER の詳細については、System.Runtime.ConstrainedExecution 名前空間のトピックを参照してください。

CriticalFinalizerObject クラスから派生したクラスでは、ファイナライザが CER の規則に従っている限り、CLR によって強制的にアプリケーション ドメインがアンロードされたり、スレッドが中断されたりするような状況でも、絶対に実行されなければならない終了コードについてはすべて実行されるよう、共通言語ランタイム (CLR) によって保証されます。ファイナライザが CER の規則に違反していると、実行に失敗する場合があります。さらに、CLR によって、通常のファイナライザと重大なファイナライザ間の弱い順序付けが確立されます。ガベージ コレクションによって同時にクリアされるオブジェクトについては、重大なファイナライザの前に、すべての重大ではないファイナライザが呼び出されます。たとえば、CriticalFinalizerObject から派生した SafeHandle クラスにデータを保持する FileStream などのクラスは、標準のファイナライザを実行して、バッファ内の既存データをフラッシュできます。

ほとんどの場合、CriticalFinalizerObject クラスから派生するクラスを作成する必要はありません。.NET Framework クラス ライブラリには、リソース処理用の重大な終了操作の機能を提供する SafeHandleCriticalHandle の 2 つのクラスが用意されています。さらに、.NET Framework には、SafeHandle クラスから派生した作成済みのクラスのセットが用意されています。このセットは Microsoft.Win32.SafeHandles 名前空間にあります。これらのクラスは、ファイルとオペレーティング システムの処理をサポートする共通機能を提供するために設計されています。


SafeFileHandle クラスを使用して、標準入力ストリームと標準出力ストリームの重大な終了操作を提供するコード例を次に示します。SafeHandle クラスから派生した SafeFileHandle は、FileStream コンストラクタでファイル ストリームに渡されます。

C#
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;
                }
            }
        }

    }
}
アクセス許可

継承階層

System..::.Object
  System.Runtime.ConstrainedExecution..::.CriticalFinalizerObject
    System.Runtime.InteropServices..::.CriticalHandle
    System.Runtime.InteropServices..::.SafeHandle
    System.Runtime..::.MemoryFailPoint
    System.Security..::.SecureString
    System.Threading..::.ReaderWriterLock
    System.Threading..::.Thread
スレッド セーフ

この型のすべてのパブリック static (Visual Basic では Shared) メンバは、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォーム

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

バージョン情報

.NET Framework

サポート対象 : 3.5、3.0、2.0
参照

参照

その他の技術情報

タグ :


Page view tracker