CriticalFinalizerObject Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Гарантирует, что весь код завершения в производных классах помечен как критически важный.
public ref class CriticalFinalizerObject abstract
public abstract class CriticalFinalizerObject
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObject
type CriticalFinalizerObject = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type CriticalFinalizerObject = class
Public 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). Для этого требуется код в методе завершения для вызова только кода с строгим контрактом надежности. Дополнительные сведения о ЦС см. в System.Runtime.ConstrainedExecution пространстве имен.
В классах, производных от CriticalFinalizerObject класса, среда CLR гарантирует, что всем критически важным кодом завершения будет предоставлена возможность выполнить, если метод завершения следует правилам CER, даже в ситуациях, когда СРЕДА CLR принудительно выгрузит домен приложения или прерывает поток. Если средство завершения нарушает правила ДЛЯ CER, оно может не выполниться. Кроме того, среда CLR устанавливает слабый порядок между обычными и критически важными средствами завершения: для объектов, отброскиваемых сборкой мусора одновременно, все некритические методы завершения вызываются перед любым критическим методом завершения. Например, класс FileStream, содержащий данные в классе, производном от SafeHandleCriticalFinalizerObjectнего, может запустить стандартный метод завершения для очистки существующих буферных данных.
В большинстве случаев не нужно писать классы, производные от 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) |