クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
.NET 開発
.NET Framework 3.5
.NET Framework 3.5
System 名前空間
Exception クラス

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2008/.NET Framework 3.5

その他のバージョンについては、以下の情報を参照してください。
.NET Framework クラス ライブラリ
Exception クラス

更新 : 2007 年 11 月

アプリケーションの実行中に発生するエラーを表します。

名前空間 :  System
アセンブリ :  mscorlib (mscorlib.dll 内)
Visual Basic (宣言)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
<ClassInterfaceAttribute(ClassInterfaceType.None)> _
Public Class Exception _
    Implements ISerializable, _Exception
Visual Basic (使用法)
Dim instance As Exception
C#
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public class Exception : ISerializable, _Exception
Visual C++
[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType::None)]
public ref class Exception : ISerializable, 
    _Exception
J#
/** @attribute SerializableAttribute */ 
/** @attribute ComVisibleAttribute(true) */
/** @attribute ClassInterfaceAttribute(ClassInterfaceType.None) */
public class Exception implements ISerializable, 
    _Exception
JScript
public class Exception implements ISerializable, _Exception

このクラスは、すべての例外の基本クラスです。エラーが発生すると、システムまたは現在実行中のアプリケーションは、そのエラーに関する情報が格納された例外をスローすることによりエラーをレポートします。スローされた例外は、アプリケーションまたは既定の例外ハンドラによって処理されます。

try-catch ブロック

共通言語ランタイムは、オブジェクトとして例外の表現に基づく例外処理モデルを提供し、また、プログラム コードと例外処理コードをそれぞれ 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 には、例外のコード位置、種類、ヘルプ ファイル、および理由を識別するのに役立つ多くのプロパティが含まれています。それらのプロパティには、StackTraceInnerExceptionMessageHelpLinkHResultSourceTargetSite、および Data があります。

2 つ以上の例外の間に因果関係があると、InnerException プロパティにはこの情報が保持されます。外部例外は、この内部例外に応答してスローされます。外部例外を処理するコードは、先に発生した内部例外からの情報を使用して、より的確にエラーを処理できます。例外に関する補足情報は、Data プロパティに格納できます。

例外オブジェクトの作成中にコンストラクタに渡されたエラー メッセージ文字列はローカライズされているため、ResourceManager を使用してリソース ファイルから指定できます。ローカライズされたリソースの詳細については、System.Resources 名前空間の概要のトピックおよび「リソースのパッケージ化と配置」を参照してください。

例外の発生理由に関する詳細情報をユーザーに提供するために、HelpLink プロパティにヘルプ ファイルの URL (または URN) を保持させることができます。

Exception は、値 0x80131500 を保持する HRESULT COR_E_EXCEPTION を使用します。

Exception のインスタンスの初期プロパティ値の一覧については、Exception コンストラクタのトピックを参照してください。

パフォーマンスに関する注意事項

例外をスローしたり処理したりするときには、大量のシステム リソースおよび実行時間が使われます。予測可能なイベントやフロー制御の処理のためではなく、真に異常な状態の場合のみ例外をスローしてください。たとえば、アプリケーションでは有効なパラメータでメソッドが呼び出されることを前提としているので、メソッド引数が無効な場合は適切な理由で例外をスローできます。メソッド引数が無効であるということは、何か異常が発生していることを示しています。これに対して、ユーザー入力が無効である場合は例外をスローしないでください。ユーザーが無効なデータを入力する場合があることは予測可能な事態だからです。このような場合は、ユーザーが有効なデータを入力できる再試行メカニズムを用意します。

異常な状況に対して例外をスローする場合は、特定の例外に適用されるハンドラではなく、アプリケーションの大半に適用される汎用目的の例外ハンドラで例外をキャッチします。この手法は、エラーの大半は発生位置の周辺で検証やエラー処理コードを使って対応できるものであり、例外のスローまたはキャッチは不要であるという考え方に基づいています。汎用目的の例外ハンドラがキャッチする対象は、アプリケーションの任意の場所でスローされ、適切に予測できない例外です。

また、リターン コードが十分である場合に例外をスローしたり、リターン コードを例外に変換したりしないでください。例外をキャッチした場合に、それを無視して処理を続行することは避けてください。

ArithmeticException エラーを処理するように定義されている catch ブロックを示すコード例は、次のとおりです。DivideByZeroExceptionArithmeticException から派生し、DivideByZeroException エラーに対して明示的に定義された catch ブロックがないため、この catch ブロックは DivideByZeroException エラーも受け取ります。

Visual Basic
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
'
'This code example produces the following results:
'
'ArithmeticException Handler: System.OverflowException: Arithmetic operation resulted in an overflow.
'   at ExceptionTestClass.Main()
'

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());
         }
   }    
}
/*
This code example produces the following results:

ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
   at ExceptionTestClass.Main()

*/

Visual C++
using namespace System;
int main()
{
    int x = 0;
    try
    {
        int y = 100 / x;
    }
    catch ( ArithmeticException^ e ) 
    {
        Console::WriteLine( "ArithmeticException Handler: {0}", e );
    }
    catch ( Exception^ e ) 
    {
        Console::WriteLine( "Generic Exception Handler: {0}", e );
    }
}
/*
This code example produces the following results:

ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
   at main()

*/

J#
import System.*;

class ExceptionTestClass
{
    public static void main(String[] args)
    {
        int x = 0;
        try {
            int y = 100 / x;
        }
        catch (ArithmeticException e) {
            Console.WriteLine("ArithmeticException Handler: {0}", e.ToString());
        }
        catch (System.Exception e) {
            Console.WriteLine("Generic Exception Handler: {0}", e.ToString());
        }
    } //main
} //ExceptionTestClass

System..::.Object
  System..::.Exception
    Microsoft.Build.BuildEngine..::.InternalLoggerException
    Microsoft.Build.BuildEngine..::.InvalidProjectFileException
    Microsoft.Build.BuildEngine..::.InvalidToolsetDefinitionException
    Microsoft.Build.BuildEngine..::.RemoteErrorException
    Microsoft.Build.Framework..::.LoggerException
    Microsoft.JScript..::.CmdLineException
    Microsoft.JScript..::.ParserException
    Microsoft.ManagementConsole.Advanced..::.PrimarySnapInDataException
    Microsoft.ManagementConsole.Internal..::.PrimarySnapInDataException
    Microsoft.VisualBasic.ApplicationServices..::.CantStartSingleInstanceException
    Microsoft.VisualBasic.ApplicationServices..::.NoStartupFormException
    Microsoft.VisualBasic.Compatibility.VB6..::.WebClassContainingClassNotOptional
    Microsoft.VisualBasic.Compatibility.VB6..::.WebClassCouldNotFindEvent
    Microsoft.VisualBasic.Compatibility.VB6..::.WebClassNextItemCannotBeCurrentWebItem
    Microsoft.VisualBasic.Compatibility.VB6..::.WebClassNextItemRespondNotFound
    Microsoft.VisualBasic.Compatibility.VB6..::.WebClassUserWebClassNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6..::.WebClassWebClassFileNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6..::.WebClassWebItemNotValid
    Microsoft.VisualBasic.Compatibility.VB6..::.WebItemAssociatedWebClassNotOptional
    Microsoft.VisualBasic.Compatibility.VB6..::.WebItemClosingTagNotFound
    Microsoft.VisualBasic.Compatibility.VB6..::.WebItemCouldNotLoadEmbeddedResource
    Microsoft.VisualBasic.Compatibility.VB6..::.WebItemCouldNotLoadTemplateFile
    Microsoft.VisualBasic.Compatibility.VB6..::.WebItemNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6..::.WebItemNoTemplateSpecified
    Microsoft.VisualBasic.Compatibility.VB6..::.WebItemTooManyNestedTags
    Microsoft.VisualBasic.Compatibility.VB6..::.WebItemUnexpectedErrorReadingTemplateFile
    Microsoft.VisualBasic.CompilerServices..::.IncompleteInitialization
    Microsoft.VisualBasic.CompilerServices..::.InternalErrorException
    Microsoft.VisualBasic.FileIO..::.MalformedLineException
    Microsoft.Web.Administration..::.ServerManagerException
    Microsoft.Web.Management.Server..::.WebManagementServiceException
    System.AddIn.Hosting..::.AddInSegmentDirectoryNotFoundException
    System.AddIn.Hosting..::.InvalidPipelineStoreException
    System..::.ApplicationException
    System.ComponentModel.Design..::.ExceptionCollection
    System.Configuration.Provider..::.ProviderException
    System.Configuration..::.SettingsPropertyIsReadOnlyException
    System.Configuration..::.SettingsPropertyNotFoundException
    System.Configuration..::.SettingsPropertyWrongTypeException
    System.Data.Linq..::.ChangeConflictException
    System.Diagnostics.Eventing.Reader..::.EventLogException
    System.DirectoryServices.ActiveDirectory..::.ActiveDirectoryObjectExistsException
    System.DirectoryServices.ActiveDirectory..::.ActiveDirectoryObjectNotFoundException
    System.DirectoryServices.ActiveDirectory..::.ActiveDirectoryOperationException
    System.DirectoryServices.ActiveDirectory..::.ActiveDirectoryServerDownException
    System.DirectoryServices.Protocols..::.DirectoryException
    System.IdentityModel.Selectors..::.CardSpaceException
    System.IdentityModel.Selectors..::.IdentityValidationException
    System.IdentityModel.Selectors..::.PolicyValidationException
    System.IdentityModel.Selectors..::.ServiceBusyException
    System.IdentityModel.Selectors..::.ServiceNotStartedException
    System.IdentityModel.Selectors..::.StsCommunicationException
    System.IdentityModel.Selectors..::.UnsupportedPolicyOptionsException
    System.IdentityModel.Selectors..::.UntrustedRecipientException
    System.IdentityModel.Selectors..::.UserCancellationException
    System..::.InvalidTimeZoneException
    System.IO.IsolatedStorage..::.IsolatedStorageException
    System.IO.Log..::.SequenceFullException
    System.Management.Instrumentation..::.InstrumentationBaseException
    System.Management.Instrumentation..::.WmiProviderInstallationException
    System.Net.Mail..::.SmtpException
    System.Net.PeerToPeer..::.PeerToPeerException
    System.Runtime.CompilerServices..::.RuntimeWrappedException
    System.Runtime.Remoting.MetadataServices..::.SUDSGeneratorException
    System.Runtime.Remoting.MetadataServices..::.SUDSParserException
    System.Runtime.Serialization..::.InvalidDataContractException
    System.Security.RightsManagement..::.RightsManagementException
    System.ServiceModel.Channels..::.InvalidChannelBindingException
    System..::.SystemException
    System.Threading..::.LockRecursionException
    System..::.TimeZoneNotFoundException
    System.Web.Query.Dynamic..::.ParseException
    System.Web.Security..::.MembershipCreateUserException
    System.Web.Security..::.MembershipPasswordException
    System.Web.UI..::.ViewStateException
    System.Web.UI.WebControls..::.LinqDataSourceValidationException
    System.Windows.Automation..::.NoClickablePointException
    System.Windows.Automation..::.ProxyAssemblyNotLoadedException
    System.Windows.Controls..::.PrintDialogException
    System.Windows.Forms..::.AxHost..::.InvalidActiveXStateException
    System.Windows.Xps..::.XpsException
    System.Windows.Xps..::.XpsWriterException
    System.Workflow.Activities.Rules..::.RuleException
    System.Workflow.ComponentModel.Compiler..::.WorkflowValidationFailedException
    System.Workflow.ComponentModel.Serialization..::.WorkflowMarkupSerializationException
    System.Workflow.ComponentModel..::.WorkflowTerminatedException
    System.Workflow.Runtime..::.WorkflowOwnershipException
この型のすべてのパブリック static (Visual Basic では Shared) メンバは、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

.NET Framework

サポート対象 : 3.5、3.0、2.0、1.1、1.0

.NET Compact Framework

サポート対象 : 3.5、2.0、1.0

XNA Framework

サポート対象 : 2.0、1.0
コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker