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

대부분의 경우 클래스에서 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)

적용 대상

추가 정보