CriticalFinalizerObject 클래스

정의

파생 클래스의 모든 종료 코드가 위험으로 표시되어 있는지 확인합니다.

public ref class CriticalFinalizerObject abstract
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class CriticalFinalizerObject
public abstract class CriticalFinalizerObject
[<System.Runtime.InteropServices.ComVisible(true)>]
type CriticalFinalizerObject = class
type CriticalFinalizerObject = class
Public MustInherit Class CriticalFinalizerObject
상속
CriticalFinalizerObject
파생
특성

예제

다음 코드 예제에서는 표준 입력 및 출력 스트림에 SafeFileHandle 대 한 중요 한 종료를 제공 하는 클래스의 사용을 보여 줍니다. 클래스에서 SafeHandle 파생된 이 SafeFileHandle클래스는 생성자의 파일 스트림에 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(제한된 실행 영역)으로 암시적으로 처리됩니다. 이렇게 하려면 종료자의 코드가 강력한 안정성 계약을 가진 코드만 호출해야 합니다. CER에 대한 자세한 내용은 네임스페이스를 System.Runtime.ConstrainedExecution 참조하세요.

클래스에서 파생된 클래스에서 CriticalFinalizerObject CLR(공용 언어 런타임)은 CLR이 강제로 애플리케이션 도메인을 언로드하거나 스레드를 중단하는 경우에도 종료자가 CER에 대한 규칙을 따르는 경우 모든 중요한 종료 코드를 실행할 수 있도록 보장합니다. 종료자가 CER에 대한 규칙을 위반하는 경우 성공적으로 실행되지 않을 수 있습니다. 또한 CLR은 일반 및 중요 종료자 사이에서 약한 순서를 설정합니다. 가비지 수집에서 동시에 회수되는 개체의 경우 모든 중요하지 않은 종료자가 중요한 종료자 앞에 호출됩니다. 예를 들어 파생CriticalFinalizerObject된 클래스의 SafeHandle 데이터를 보유하는 클래스와 같은 FileStream클래스는 표준 종료자를 실행하여 기존 버퍼링된 데이터를 플러시할 수 있습니다.

대부분의 경우 클래스에서 CriticalFinalizerObject 파생되는 클래스를 작성할 필요가 없습니다. .NET Framework 클래스 라이브러리는 SafeHandleCriticalHandle 두 개의 클래스를 제공하여 처리 리소스에 중요한 종료 기능을 제공합니다. 또한 .NET Framework는 SafeHandle 클래스에서 파생된 미리 작성된 클래스 집합을 제공하며 이 집합은 Microsoft.Win32.SafeHandles 네임스페이스에 있습니다. 이러한 클래스는 파일 및 운영 체제 핸들을 지원하기 위한 일반적인 기능을 제공하도록 설계되었습니다.

생성자

Name Description
CriticalFinalizerObject()

CriticalFinalizerObject 클래스의 새 인스턴스를 초기화합니다.

메서드

Name Description
Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.

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

클래스에서 사용하는 모든 리소스를 해제합니다 CriticalFinalizerObject .

GetHashCode()

기본 해시 함수로 작동합니다.

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

현재 인스턴스의 Type 가져옵니다.

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

현재 Object단순 복사본을 만듭니다.

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

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상

추가 정보