Exception(例外)
// 任意のコードブロック単位で設定できる。
try {
}
catch ( e ) {
}
C++ との互換性のため 引数なしの catch ブロックもできる。
try {
}
catch {
// ただし例外の詳細な情報はとれない。
}
try {
// 例外を意図的になげる
throw new Exception( "test" );
}
catch ( Exception e ) {
// エラー内容と種類
Console.WriteLine( e.Message() );
Console.WriteLine( e.GetType() );
}
finally {
}
例外の種類
Java と同じく、例外にもクラス階層があり、詳細にエラー処理をする場合は
派生先の例外クラスを指定する。
任意の例外をキャッチするなら、 Exception を指定する。
try {
}
catch ( IOException ) {
}
catch ( InvalidOperationException ) {
}
例外の再スロー
try {
}
catch ( Exception e ) {
// 何かの処理をして、
// 再度なげる
throw;
}
非同期Delegateの例外
class Test
{
public static void method() {
Thread.Sleep(3000);
Console.Write("例外を発生させます");
int z = 0;
int i = 10 / z;
}
}
{
public delegate void AsyncInvoke();
static void Main(string[] args)
{
AsyncInvoke i = new AsyncInvoke( Test.method );
IAsyncResult ret = i.BeginInvoke( null, null );
while (ret.IsCompleted == false )
{
Thread.Sleep( 100 );
Console.Write(".");
}
// EndInvoke() を実行することで, 例外が補足できる。
// 逆に実行をしないと補足できないため、返値の有無に関係なくコールすること。
try
{
i.EndInvoke(ret);
}
catch (Exception e)
{
Console.WriteLine("Thread throw Exception");
}
}
}