CriticalFinalizerObject CriticalFinalizerObject CriticalFinalizerObject CriticalFinalizerObject Class

Определение

Гарантирует, что весь код завершения в производных классах помечен как критический.Ensures that all finalization code in derived classes is marked as critical.

public ref class CriticalFinalizerObject abstract
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObject
type CriticalFinalizerObject = class
Public MustInherit Class CriticalFinalizerObject
Наследование
CriticalFinalizerObjectCriticalFinalizerObjectCriticalFinalizerObjectCriticalFinalizerObject
Производный
Атрибуты

Примеры

В следующем примере кода показано использование 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;
            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).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. Если метод завершения нарушает правила для области ограниченного Выполнения, он может не выполниться успешно.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 предоставляет два класса SafeHandle и CriticalHandle, которые предоставляют функциональные возможности критическое завершение для ресурсов обработчика.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)

Безопасность

SecurityPermission
для разрешения на вызов неуправляемого кода.for permission to call unmanaged code. Действие по обеспечению безопасности: LinkDemand.Security action: LinkDemand. Связанное перечисление: UnmanagedCodeAssociated enumeration: UnmanagedCode

InheritanceDemand
для полного доверия для разработчиков производных классов.for full trust for inheritors. Этот класс не может использоваться частично доверенным кодом.This class cannot be used by partially trusted code.

Применяется к

Дополнительно