ExceptionHandlingClause 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
구조적 예외 처리 블록에 포함된 절을 나타냅니다.
public ref class ExceptionHandlingClause
public ref class ExceptionHandlingClause sealed
public class ExceptionHandlingClause
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ExceptionHandlingClause
[System.Runtime.InteropServices.ComVisible(true)]
public class ExceptionHandlingClause
type ExceptionHandlingClause = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type ExceptionHandlingClause = class
Public Class ExceptionHandlingClause
Public NotInheritable Class ExceptionHandlingClause
- 상속
-
ExceptionHandlingClause
- 특성
예제
다음 코드 예제에서는 라는 MethodBodyExample
테스트 메서드를 정의하고 해당 지역 변수 정보 및 예외 처리 절을 표시합니다. 메서드는 MethodBase.GetMethodBody 테스트 메서드에 대한 개체를 MethodBody 가져오는 데 사용됩니다. 속성은 ExceptionHandlingClauses 개체 목록을 ExceptionHandlingClause 가져오고 해당 속성을 표시하는 데 사용됩니다.
Ildasm.exe 사용하여 컴파일된 코드 예제에 대한 MSIL을 검사하여 오프셋과 길이가 계산되는 방식을 확인할 수 있습니다.
이 코드는 클래스 토픽에 있는 더 큰 예제의 MethodBody 일부입니다.
#using <System.dll>
using namespace System;
using namespace System::Reflection;
public ref class Example
{
// The Main method contains code to analyze this method, using
// the properties and methods of the MethodBody class.
public:
void MethodBodyExample(Object^ arg)
{
// Define some local variables. In addition to these variables,
// the local variable list includes the variables scoped to
// the catch clauses.
int var1 = 42;
String^ var2 = "Forty-two";
try
{
// Depending on the input value, throw an ArgumentException or
// an ArgumentNullException to test the Catch clauses.
if (arg == nullptr)
{
throw gcnew ArgumentNullException("The argument cannot " +
"be null.");
}
if (arg->GetType() == String::typeid)
{
throw gcnew ArgumentException("The argument cannot " +
"be a string.");
}
}
// There is no Filter clause in this code example. See the Visual
// Basic code for an example of a Filter clause.
// This catch clause handles the ArgumentException class, and
// any other class derived from Exception.
catch (ArgumentException^ ex)
{
Console::WriteLine("Ordinary exception-handling clause caught:" +
" {0}", ex->GetType());
}
finally
{
var1 = 3033;
var2 = "Another string.";
}
}
};
int main()
{
// Get method body information.
MethodInfo^ mi =
Example::typeid->GetMethod("MethodBodyExample");
MethodBody^ mb = mi->GetMethodBody();
Console::WriteLine("\r\nMethod: {0}", mi);
// Display the general information included in the
// MethodBody object.
Console::WriteLine(" Local variables are initialized: {0}",
mb->InitLocals);
Console::WriteLine(" Maximum number of items on the operand " +
"stack: {0}", mb->MaxStackSize);
using System;
using System.Reflection;
public class Example
{
public static void Main()
{
// Get method body information.
MethodInfo mi = typeof(Example).GetMethod("MethodBodyExample");
MethodBody mb = mi.GetMethodBody();
Console.WriteLine("\r\nMethod: {0}", mi);
// Display the general information included in the
// MethodBody object.
Console.WriteLine(" Local variables are initialized: {0}",
mb.InitLocals);
Console.WriteLine(" Maximum number of items on the operand stack: {0}",
mb.MaxStackSize);
Imports System.Reflection
Public Class Example
Public Shared Sub Main()
' Demonstrate the effect of the Visual Basic When keyword, which
' generates a Filter clause in the Try block.
Dim e As New Example()
Console.WriteLine()
e.MethodBodyExample("String argument")
e.MethodBodyExample(Nothing)
' Get method body information.
Dim mi As MethodInfo = _
GetType(Example).GetMethod("MethodBodyExample")
Dim mb As MethodBody = mi.GetMethodBody()
Console.WriteLine(vbCrLf & "Method: {0}", mi)
' Display the general information included in the
' MethodBody object.
Console.WriteLine(" Local variables are initialized: {0}", _
mb.InitLocals)
Console.WriteLine(" Maximum number of items on the operand stack: {0}", _
mb.MaxStackSize)
// Display exception handling clauses.
Console::WriteLine();
for each(ExceptionHandlingClause^ exhc in mb->ExceptionHandlingClauses)
{
Console::WriteLine(exhc->Flags.ToString());
// The FilterOffset property is meaningful only for Filter
// clauses. The CatchType property is not meaningful for
// Filter or Finally clauses.
switch(exhc->Flags)
{
case ExceptionHandlingClauseOptions::Filter:
Console::WriteLine(" Filter Offset: {0}",
exhc->FilterOffset);
break;
case ExceptionHandlingClauseOptions::Finally:
break;
default:
Console::WriteLine(" Type of exception: {0}",
exhc->CatchType);
break;
}
Console::WriteLine(" Handler Length: {0}",
exhc->HandlerLength);
Console::WriteLine(" Handler Offset: {0}",
exhc->HandlerOffset);
Console::WriteLine(" Try Block Length: {0}", exhc->TryLength);
Console::WriteLine(" Try Block Offset: {0}", exhc->TryOffset);
}
// Display exception handling clauses.
Console.WriteLine();
foreach (ExceptionHandlingClause ehc in mb.ExceptionHandlingClauses)
{
Console.WriteLine(ehc.Flags.ToString());
// The FilterOffset property is meaningful only for Filter
// clauses. The CatchType property is not meaningful for
// Filter or Finally clauses.
switch (ehc.Flags)
{
case ExceptionHandlingClauseOptions.Filter:
Console.WriteLine(" Filter Offset: {0}",
ehc.FilterOffset);
break;
case ExceptionHandlingClauseOptions.Finally:
break;
default:
Console.WriteLine(" Type of exception: {0}",
ehc.CatchType);
break;
}
Console.WriteLine(" Handler Length: {0}", ehc.HandlerLength);
Console.WriteLine(" Handler Offset: {0}", ehc.HandlerOffset);
Console.WriteLine(" Try Block Length: {0}", ehc.TryLength);
Console.WriteLine(" Try Block Offset: {0}", ehc.TryOffset);
}
' Display exception handling clauses.
Console.WriteLine()
For Each ehc As ExceptionHandlingClause In mb.ExceptionHandlingClauses
Console.WriteLine(ehc.Flags.ToString())
' The FilterOffset property is meaningful only for Filter
' clauses. The CatchType property is not meaningful for
' Filter or Finally clauses.
Select Case ehc.Flags
Case ExceptionHandlingClauseOptions.Filter
Console.WriteLine(" Filter Offset: {0}", _
ehc.FilterOffset)
Case ExceptionHandlingClauseOptions.Finally
Case Else
Console.WriteLine(" Type of exception: {0}", _
ehc.CatchType)
End Select
Console.WriteLine(" Handler Length: {0}", ehc.HandlerLength)
Console.WriteLine(" Handler Offset: {0}", ehc.HandlerOffset)
Console.WriteLine(" Try Block Length: {0}", ehc.TryLength)
Console.WriteLine(" Try Block Offset: {0}", ehc.TryOffset)
Next
// The Main method contains code to analyze this method, using
// the properties and methods of the MethodBody class.
public:
void MethodBodyExample(Object^ arg)
{
// Define some local variables. In addition to these variables,
// the local variable list includes the variables scoped to
// the catch clauses.
int var1 = 42;
String^ var2 = "Forty-two";
try
{
// Depending on the input value, throw an ArgumentException or
// an ArgumentNullException to test the Catch clauses.
if (arg == nullptr)
{
throw gcnew ArgumentNullException("The argument cannot " +
"be null.");
}
if (arg->GetType() == String::typeid)
{
throw gcnew ArgumentException("The argument cannot " +
"be a string.");
}
}
// There is no Filter clause in this code example. See the Visual
// Basic code for an example of a Filter clause.
// This catch clause handles the ArgumentException class, and
// any other class derived from Exception.
catch (ArgumentException^ ex)
{
Console::WriteLine("Ordinary exception-handling clause caught:" +
" {0}", ex->GetType());
}
finally
{
var1 = 3033;
var2 = "Another string.";
}
}
}
// The Main method contains code to analyze this method, using
// the properties and methods of the MethodBody class.
public void MethodBodyExample(object arg)
{
// Define some local variables. In addition to these variables,
// the local variable list includes the variables scoped to
// the catch clauses.
int var1 = 42;
string var2 = "Forty-two";
try
{
// Depending on the input value, throw an ArgumentException or
// an ArgumentNullException to test the Catch clauses.
if (arg == null)
{
throw new ArgumentNullException("The argument cannot be null.");
}
if (arg.GetType() == typeof(string))
{
throw new ArgumentException("The argument cannot be a string.");
}
}
// This filter clause selects only exceptions that derive
// from the ArgumentException class.
// Other exceptions, including ArgumentException itself,
// are not handled by this filter clause.
catch (ArgumentException ex) when (ex.GetType().IsSubclassOf(typeof(ArgumentException)))
{
Console.WriteLine("Filter clause caught: {0}", ex.GetType());
}
// This catch clause handles the ArgumentException class, and
// any other class derived from Exception.
catch(Exception ex)
{
Console.WriteLine("Ordinary exception-handling clause caught: {0}",
ex.GetType());
}
finally
{
var1 = 3033;
var2 = "Another string.";
}
}
}
// This code example produces output similar to the following:
//
//Method: Void MethodBodyExample(System.Object)
// Local variables are initialized: True
// Maximum number of items on the operand stack: 2
End Sub
' This test method is executed at the beginning of Main, to show
' how the Filter clause works. The Filter clause is generated by
' a Visual Basic When expression. If arg is Nothing, this method
' throws ArgumentNullException, which is caught by the filter
' clause. If arg is a string, the method throws ArgumentException,
' which does not match the filter clause.
'
' Sub Main also contains code to analyze this method, using
' the properties and methods of the MethodBody class.
Public Sub MethodBodyExample(ByVal arg As Object)
' Define some local variables. In addition to these variables,
' the local variable list includes the variables scoped to
' the catch clauses.
Dim var1 As Integer = 42
Dim var2 As String = "Forty-two"
Try
' Depending on the input value, throw an ArgumentException or
' an ArgumentNullException to test the Catch clauses.
'
If arg Is Nothing Then
Throw New ArgumentNullException("The argument cannot be Nothing.")
End If
If arg.GetType() Is GetType(String) Then
Throw New ArgumentException("The argument cannot be a string.")
End If
' The When expression makes this a filter clause. The expression
' selects only exceptions that derive from the ArgumentException
' class. Other exceptions, including ArgumentException itself,
' are not handled by this filter clause.
Catch ex As ArgumentException _
When ex.GetType().IsSubclassOf(GetType(ArgumentException))
Console.WriteLine("Filter clause caught: {0}", ex.GetType())
' This catch clause handles the ArgumentException class, and
' any other class derived from Exception.
Catch ex As Exception
Console.WriteLine("Ordinary exception-handling clause caught: {0}", _
ex.GetType())
Finally
var1 = 3033
var2 = "Another string."
End Try
End Sub
End Class
' This code example produces output similar to the following:
'
'Ordinary exception-handling clause caught: System.ArgumentException
'Filter clause caught: System.ArgumentNullException
'
'Method: Void MethodBodyExample(System.Object)
' Local variables are initialized: True
' Maximum number of items on the operand stack: 3
//Clause
// Type of exception: System.ArgumentException
// Handler Length: 29
// Handler Offset: 78
// Try Block Length: 65
// Try Block Offset: 13
//Finally
// Handler Length: 13
// Handler Offset: 113
// Try Block Length: 100
// Try Block Offset: 13
//
//Filter
// Filter Offset: 71
// Handler Length: 23
// Handler Offset: 116
// Try Block Length: 61
// Try Block Offset: 10
//Clause
// Type of exception: System.Exception
// Handler Length: 21
// Handler Offset: 70
// Try Block Length: 61
// Try Block Offset: 9
//Finally
// Handler Length: 14
// Handler Offset: 94
// Try Block Length: 85
// Try Block Offset: 9
'
'Filter
' Filter Offset: 0
' Handler Length: 19
' Handler Offset: 99
' Try Block Length: 45
' Try Block Offset: 9
'Clause
' Type of exception: System.Exception
' Handler Length: 25
' Handler Offset: 118
' Try Block Length: 45
' Try Block Offset: 9
'Finally
' Handler Length: 13
' Handler Offset: 153
' Try Block Length: 144
' Try Block Offset: 9
설명
클래스는 ExceptionHandlingClause 의 절 try
에 대한 정보를 제공합니다.catch
...
finally
블록(Try
...Catch
...Finally
Visual Basic에서). 메서드에서 예외 처리 절 목록을 가져오려면 메서드를 나타내는 을 가져옵니다 MethodInfo . 사용 하 여는 GetMethodBody 메서드를 개체를 MethodBody 가져온 다음 사용 하 ExceptionHandlingClauses 여는 절의 목록을 가져올 속성입니다.
참고
예외 처리 절을 사용하려면 메타데이터 및 MSIL(Microsoft Intermediate Language) 명령 형식을 철저히 이해해야 합니다. 정보는 CLI(공용 언어 인프라) 설명서, 특히 "파티션 II: 메타데이터 정의 및 의미 체계"에서 찾을 수 있습니다.
생성자
ExceptionHandlingClause() |
ExceptionHandlingClause 클래스의 새 인스턴스를 초기화합니다. |
속성
CatchType |
이 절이 처리하는 예외 형식을 가져옵니다. |
FilterOffset |
메서드 본문 내에서 사용자가 제공한 필터 코드의 오프셋(바이트)을 가져옵니다. |
Flags |
이 예외 처리 절이 finally 절, 형식 필터 절 또는 사용자 필터 절인지 나타내는 값을 가져옵니다. |
HandlerLength |
이 예외 처리 절의 본문 길이(바이트)를 가져옵니다. |
HandlerOffset |
메서드 본문 내에서 이 예외 처리 절의 오프셋(바이트)을 가져옵니다. |
TryLength |
이 예외 처리 절이 포함된 try 블록의 총 길이(바이트)입니다. |
TryOffset |
메서드 내에서 이 예외 처리 절이 포함된 try 블록의 오프셋(바이트)입니다. |
메서드
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
ToString() |
예외 처리 절의 문자열 표현입니다. |
적용 대상
추가 정보
.NET