CriticalFinalizerObject クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
派生クラスのすべての最終処理コードがクリティカルとしてマークされていることを確認します。
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
- 継承
-
CriticalFinalizerObject
- 派生
- 属性
例
次のコード例は、 SafeFileHandle クラスを使用して、標準の入力ストリームと出力ストリームに重要な最終処理を提供する方法を示しています。 SafeHandle クラスから派生したSafeFileHandleは、FileStream コンストラクターのファイル ストリームに渡されます。
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
注釈
CriticalFinalizerObject クラスから派生したクラスは、制約付き実行領域 (CER) として暗黙的に扱われます。 これには、ファイナライザーのコードで、信頼性の高いコントラクトを持つコードのみを呼び出す必要があります。 CER の詳細については、 System.Runtime.ConstrainedExecution 名前空間を参照してください。
CriticalFinalizerObject クラスから派生したクラスでは、CLR がアプリケーション ドメインを強制的にアンロードしたりスレッドを中止したりする場合でも、ファイナライザーが CER の規則に従っている場合でも、共通言語ランタイム (CLR) は、すべての重要なファイナライズ コードに実行の機会が与えられることを保証します。 ファイナライザーが CER の規則に違反すると、正常に実行されない可能性があります。 さらに、CLR は通常のファイナライザーとクリティカル ファイナライザーの間で弱い順序を確立します。ガベージ コレクションによって同時に再利用されるオブジェクトの場合、クリティカルでないファイナライザーはすべて、クリティカル ファイナライザーの前に呼び出されます。 たとえば、CriticalFinalizerObjectから派生したSafeHandle クラス内のデータを保持する FileStream などのクラスは、標準ファイナライザーを実行して、バッファー内の既存のデータをフラッシュできます。
ほとんどの場合、 CriticalFinalizerObject クラスから派生するクラスを記述する必要はありません。 .NET Framework クラス ライブラリには、SafeHandle と CriticalHandle という 2 つのクラスが用意されています。このクラスは、リソースを処理するための重要な最終処理機能を提供します。 さらに、.NET Framework には、SafeHandle クラスから派生した一連の事前書き込みクラスが用意されており、このセットは Microsoft.Win32.SafeHandles 名前空間にあります。 これらのクラスは、ファイルとオペレーティング システムのハンドルをサポートするための一般的な機能を提供するように設計されています。
コンストラクター
| 名前 | 説明 |
|---|---|
| CriticalFinalizerObject() |
CriticalFinalizerObject クラスの新しいインスタンスを初期化します。 |
メソッド
| 名前 | 説明 |
|---|---|
| Equals(Object) |
指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
| Finalize() |
CriticalFinalizerObject クラスによって使用されるすべてのリソースを解放します。 |
| GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
| GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
| MemberwiseClone() |
現在の Objectの簡易コピーを作成します。 (継承元 Object) |
| ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |