CriticalFinalizerObject 类  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
确保派生类中的所有终止代码均标记为关键。
public ref class CriticalFinalizerObject abstractpublic abstract class CriticalFinalizerObject[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObjecttype CriticalFinalizerObject = class[<System.Runtime.InteropServices.ComVisible(true)>]
type CriticalFinalizerObject = classPublic MustInherit Class CriticalFinalizerObject- 继承
- 
				CriticalFinalizerObject
- 派生
- 属性
示例
下面的代码示例演示如何使用 SafeFileHandle 类为标准输入和输出流提供关键终结。 SafeFileHandle派生自 类的 SafeHandle 传递到构造函数中的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 在正常终结器和关键终结器之间建立弱排序:对于同时由垃圾回收回收的对象,所有非关键终结器都会在任何关键终结器之前调用。 例如,类(如 FileStream)在派生自 CriticalFinalizerObject的类中SafeHandle保存数据,可以运行标准终结器来刷新现有的缓冲数据。
在大多数情况下,不需要编写派生自 类的 CriticalFinalizerObject 类。 .NET Framework 类库提供两个类: SafeHandle 和 CriticalHandle,为句柄资源提供关键的终结功能。 此外,.NET Framework提供一组派生自 SafeHandle 类的预写类,此集位于 命名空间中Microsoft.Win32.SafeHandles。 这些类旨在提供用于支持文件和操作系统句柄的常见功能。
构造函数
| CriticalFinalizerObject() | 初始化 CriticalFinalizerObject 类的新实例。 | 
方法
| Equals(Object) | 确定指定对象是否等于当前对象。(继承自 Object) | 
| Finalize() | 释放 CriticalFinalizerObject 类使用的所有资源。 | 
| GetHashCode() | 作为默认哈希函数。(继承自 Object) | 
| GetType() | 获取当前实例的 Type。(继承自 Object) | 
| MemberwiseClone() | 创建当前 Object 的浅表副本。(继承自 Object) | 
| ToString() | 返回表示当前对象的字符串。(继承自 Object) |