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. 종료자는 CER에 대 한 규칙을 위반을 하는 경우이 실행 될 수 없음을 성공적으로 합니다.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 클래스 라이브러리 SafeHandleCriticalHandle, 핸들 리소스에 대 한 중요 한 종료 기능을 제공 합니다.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.

적용 대상

추가 정보