Exception クラス
アプリケーションの実行中に発生するエラーを表します。
この型のすべてのメンバの一覧については、Exception メンバ を参照してください。
System.Object
System.Exception
派生クラス
<Serializable>
<ClassInterface(ClassInterfaceType.AutoDual)>
Public Class Exception Implements ISerializable
[C#]
[Serializable]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Exception : ISerializable
[C++]
[Serializable]
[ClassInterface(ClassInterfaceType::AutoDual)]
public __gc class Exception : public ISerializable
[JScript]
public
Serializable
ClassInterface(ClassInterfaceType.AutoDual)
class Exception implements ISerializable
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
このクラスは、すべての例外の基本クラスです。エラーが発生すると、システムまたは現在実行中のアプリケーションは、そのエラーに関する情報が格納された例外をスローすることによりエラーをレポートします。スローされた例外は、アプリケーションまたは既定の例外ハンドラによって処理されます。
共通言語ランタイムは、オブジェクトとして例外の表現に基づく例外処理モデルを提供し、また、プログラム コードと例外処理コードをそれぞれ try ブロックと catch ブロックに分離します。catch ブロックは 1 つ以上あり、それぞれのブロックは、特定の型の例外を処理するように設計されていることも、一方のブロックが他方のブロックよりも具体的な例外を受け取るように設計されていることもあります。
アプリケーションが、あるブロックのアプリケーション コードの実行中に発生する例外を処理する場合は、そのコードを try ステートメントの内部に入れる必要があります。try ステートメント内のアプリケーション コードは、try ブロックです。try ブロックによりスローされた例外を処理するアプリケーション コードは catch ステートメントの内部に入れられ、catch ブロックと呼ばれます。0 個以上の catch ブロックが try ブロックに関連付けられ、それぞれの catch ブロックには、そのブロックが処理する例外の種類を判断する型フィルタが含まれています。
try ブロックで例外が発生すると、その例外を処理する catch ブロックが見つかるまで、関連付けられている catch ブロックが、アプリケーション コード内での出現順に検索されます。catch ブロックの型フィルタが T または T の派生元の型を指定している場合、その catch ブロックは T 型の例外を処理します。例外を処理する最初の catch ブロックが見つかると、システムは検索を中断します。そのため、アプリケーション コードでは、このセクション以降の例で示されるように、ある種類を処理する catch ブロックは、その基本となる種類を処理する catch ブロックよりも前に指定される必要があります。 System.Exception を処理する catch ブロックは最後に指定されます。
現在の try ブロックに関連付けられた catch ブロックでは例外を処理するブロックが見つからず、現在の呼び出しにおいて現在の try ブロックが他の try ブロックの入れ子になっている場合は、その外側の try ブロックに関連付けられた catch ブロックが検索されます。例外を処理する catch ブロックが見つからない場合は、現在の呼び出しにおける入れ子レベルの外側をさかのぼって検索が行われます。現在の呼び出しの中で例外を処理する catch ブロックが見つからない場合、その例外はコール スタックに渡され、上位レベルのスタック フレームで、その例外を処理する catch ブロックが検索されます。コール スタックの検索は、その例外が処理されるか、そのコール スタックにフレームがなくなるまで続けられます。例外を処理する catch ブロックが見つからずにコール スタックの最上位レベルに達した場合は、既定の例外ハンドラがその例外を処理し、アプリケーションが終了します。
例外の種類は、次の機能をサポートしています。
- ユーザーが判読できる、エラーを説明したテキスト。例外が発生すると、ランタイムはテキスト メッセージを提供して、ユーザーにエラーの性質を通知したり、問題を解決する処置のヒントを与えます。このテキスト メッセージは、例外オブジェクトの Message プロパティに保持されます。例外オブジェクトの作成時に、その特定の例外の詳細を説明するテキスト文字列をコンストラクタに渡すことができます。コンストラクタに渡すエラー メッセージの引数を指定しない場合は、既定のエラー メッセージが使用されます。
- 例外がスローされたときのコール スタックの状態。 StackTrace プロパティには、コード内のエラー発生箇所を判断するために使用できるスタック トレースが保持されています。スタック トレースは、呼び出されたすべてのメソッドと、呼び出しを行うソース ファイル内の行番号の一覧を表示します。
Exception 基本クラスには例外の 2 つのカテゴリがあります。
- SystemException から派生する定義済み共通言語ランタイム例外クラス。
- ApplicationException から派生するユーザー定義のアプリケーション例外クラス。
Exception には、例外のコード位置、種類、ヘルプ ファイル、および理由を識別するのに役立つ多くのプロパティが含まれています。それらのプロパティには、 StackTrace 、 InnerException 、 Message 、 HelpLink 、 HResult 、 Source 、および TargetSite があります。
2 つ以上の例外の間に因果関係があると、 InnerException プロパティにはこの情報が保持されます。外部例外は、この内部例外に応答してスローされます。外部例外を処理するコードは、先に発生した内部例外からの情報を使用して、より的確にエラーを処理できます。
例外オブジェクトの作成中にコンストラクタに渡されたエラー メッセージ文字列はローカライズされているため、 ResourceManager を使用してリソース ファイルから指定できます。ローカライズされたリソースの詳細については、 System.Resources 名前空間の概要のトピックおよび「 .NET Framework アプリケーションのパッケージ化と配置 」を参照してください。
例外の発生理由に関する詳細情報をユーザーに提供するために、 HelpLink プロパティにヘルプ ファイルの URL (または URN) を保持させることができます。
Exception は、値 0x80131500 を保持する HRESULT COR_E_EXCEPTION を使用します。
Exception のインスタンスの初期プロパティ値の一覧については、 Exception コンストラクタのトピックを参照してください。
使用例
[Visual Basic, C#, C++] ArithmeticException エラーを処理するように定義されている catch ブロックを示すコード例は、次のとおりです。 DivideByZeroException は ArithmeticException から派生し、 DivideByZeroException エラーに対して明示的に定義された catch ブロックがないため、この catch ブロックは DivideByZeroException エラーも受け取ります。
Imports System
Class ExceptionTestClass
Public Shared Sub Main()
Dim x As Integer = 0
Try
Dim y As Integer = 100 / x
Catch e As ArithmeticException
Console.WriteLine("ArithmeticException Handler: {0}", e.ToString())
Catch e As Exception
Console.WriteLine("Generic Exception Handler: {0}", e.ToString())
End Try
End Sub 'Main
End Class 'ExceptionTestClass
[C#]
using System;
class ExceptionTestClass
{
public static void Main()
{
int x = 0;
try
{
int y = 100/x;
}
catch (ArithmeticException e)
{
Console.WriteLine("ArithmeticException Handler: {0}", e.ToString());
}
catch (Exception e)
{
Console.WriteLine("Generic Exception Handler: {0}", e.ToString());
}
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
int main() {
int x = 0;
try {
int y = 100/x;
} catch (ArithmeticException* e) {
Console::WriteLine(S"ArithmeticException Handler: {0}", e);
} catch (Exception* e) {
Console::WriteLine(S"Generic Exception Handler: {0}", e);
}
}
[Visual Basic, C#, C++] C# コードは次の出力を生成します。
[Visual Basic, C#, C++] ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero. at ExceptionTestClass.Main()
[Visual Basic, C#, C++] Visual Basic コードは次の出力を生成します。
[Visual Basic, C#, C++] ArithmeticException Handler: System.OverflowException: Exception of type System.OverflowException was thrown. at ExceptionTestClass.Main()
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET
アセンブリ: Mscorlib (Mscorlib.dll 内)
参照
Exception メンバ | System 名前空間 | 例外の処理とスロー | リソースのパッケージ化と配置 | SystemException | ApplicationException