CriticalFinalizerObject 클래스

정의

파생 클래스의 모든 종료 코드가 결정적인 것으로 표시되도록 합니다.Ensures that all finalization code in derived classes is marked as critical.

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 표준 입력 및 출력 스트림에 대 한 중요 한 종료를 제공 하는 방법을 보여 줍니다.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은 일반적인 및 중요 한 종료자 사이에서 weak 정렬을 설정 합니다. 가비지 수집에서 동시에 회수 된 개체의 경우 중요 한 종료자 보다 먼저 모든 중요 하지 않은 종료 자가 호출 됩니다.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 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the CriticalFinalizerObject class.

메서드

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
Finalize()

CriticalFinalizerObject 클래스에서 사용하는 모든 리소스를 해제합니다.Releases all the resources used by the CriticalFinalizerObject class.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

적용 대상

추가 정보