2013-07-03 16 views
14

JavaのThrowableに相当するC#とは何ですか?JavaのThrowableに相当するC#とは何ですか?

Javaでは、例外クラス階層のルートは、Throwable,ではなく、Exceptionと呼ばれます。 Throwable基本クラスには、2つの派生クラスがあります。

Exception:合理的なアプリケーションがキャッチする可能性のある条件です。

Error:合理的なプログラムがキャッチしようとしてはならない重大な問題。

したがって、Throwableベースクラスには、妥当なプログラムがキャッチしようとするべきではない問題が含まれています。

+1

@tieTYT推測する人は、何か簡単に見上げると思いますか? – Daniel

+1

@ダニエルです。私はそれが下降犯であることを知らなかった。 –

+5

私は、この質問は、投票が示唆するほど悪くはないと思っています - Javaは、C#に直接マップするものではない 'Exception'クラスとは別の' Throwable'クラスを持っています。存在しないものを「見上げる」ことは必ずしも単純ではありません。特に、どこかにあると思われる場合は特にそうではありません。 –

答えて

12

これはException classです。 .NETの例外とは別に、別個の「投げられる」概念はありません。

+0

(投げられるものがわからないので投票できません)。 C++/CLIで必要なものを投げることはできませんか?私は 'Exception'の制限はCommon Language Specificationに準拠したコードだけだと思っていましたが、一般的には.Netではありません。 –

+0

@AlexeiLevenkov C++/CLIで許可されているとは思えません.CLRでは、 CLSはオブジェクトが 'Exception'から派生することを要求します。私は現在の言語(私が見てきた)がnull以外の非例外をスローさせるとは思わない。 –

+0

可能なかどうか検索しました。MSDNは、[String(C++ Component Extensions)](http://msdn.microsoft.com/en-us/library/vstudio/ms177218.aspx)にあります。私はそれが実際にどのように内部で動作するかわからない...多分それを例外から/に変換するかもしれない。 –

0

.Netではどのクラスでも例外が許可されますが、C#ではthrowとcatchをExceptionに制限します。例外以外の例外をキャッチするには、型も変数も指定しないcatch節を使用します。

関連仕様の抜粋:

catch節は、クラス型を指定すると、種類はのSystem.Exception、のSystem.Exceptionやシステムを持っているタイプのパラメータの型から派生型である必要があります。有効な基本クラスとしての例外(またはそのサブクラス)。

catch節でクラス型と識別子の両方が指定された場合、指定された名前と型の例外変数が宣言されます。例外変数は、キャッチブロックにまたがるスコープを持つローカル変数に対応します。 catchブロックの実行中、例外変数は現在処理中の例外を表します。明確な割り当てチェックのために、例外変数はそのスコープ全体に確実に割り当てられていると見なされます。

catch句に例外変数名が含まれていない限り、catchブロック内の例外オブジェクトにアクセスすることはできません。

例外タイプも例外変数名も指定しないcatch節は、一般的なcatch節と呼ばれます。 try文は一般的なcatch節を1つしか持てません。存在する場合は、最後のcatch節でなければなりません。

一部のプログラミング言語では、System.Exceptionから派生したオブジェクトとして表現できない例外がサポートされている場合がありますが、そのような例外はC#コードでは生成できません。一般的なcatch節は、そのような例外を捕捉するために使用されるかもしれません。したがって、一般的なcatch節はSystem.Exception型を指定するものと意味的に異なり、前者も他の言語の例外をキャッチする可能性があります。

.Net 4.0には、JavaのErrorクラスに似た概念が導入されています。破損した状態の例外は例外を拡張しますが、HandleProcessCorruptedStateExceptionsAttributeのメソッドのみがCSEをキャッチします。

関連する問題