Прочитать на английском

Поделиться через


CriticalFinalizerObject Класс

Определение

Гарантирует, что весь код завершения в производных классах помечен как критический.

public abstract class CriticalFinalizerObject
[System.Runtime.InteropServices.ComVisible(true)]
public abstract 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;
                }
            }
        }
    }
}

Комментарии

Классы, производные от класса , CriticalFinalizerObject неявно рассматриваются как ограниченная область выполнения (CER). Для этого требуется, чтобы код в методе завершения вызывал только код со строгим контрактом надежности. Дополнительные сведения о cer см. в System.Runtime.ConstrainedExecution разделе Пространство имен.

В классах, производных от CriticalFinalizerObject класса , среда CLR гарантирует, что всем критически важным кодам завершения будет предоставлена возможность выполнения при условии, что метод завершения следует правилам для CER, даже в ситуациях, когда среда CLR принудительно выгружает домен приложения или прерывает поток. Если метод завершения нарушает правила для CER, он может не выполниться. Кроме того, среда CLR устанавливает слабый порядок среди обычных и критически важных методов завершения: для объектов, освобождаемых одновременно сборкой мусора, все некритические методы завершения вызываются перед любым из критических методов завершения. Например, класс, например FileStream, который содержит данные в SafeHandle классе, производном от CriticalFinalizerObject, может запустить стандартный метод завершения для очистки существующих буферированных данных.

В большинстве случаев не требуется писать классы, производные 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)

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

См. также раздел