hakeの日記

Windows環境でプログラミングの勉強をしています。

c# - 例外処理(try / catch / finally / throw)

例外処理

例外処理は他の言語と一緒。tryブロックで例外が発生した場合、発生した例外の種類が書かれたcatchブロックの処理が実行される。finallyブロックは、例外の発生の有無に関わらず実行される。
例外の種類分けを行わない場合は、Exceptionでcatchする。

using System;

//例外処理

class MyMain
{
    static void Main(string[] args)
    {
        int a = 1;
        int b = 0;
        int c;

        try
        {
            c = a / b;
        }
        //catch( Exception e )
        catch( DivideByZeroException e )
        {
            Console.WriteLine("エラー発生");
            Console.WriteLine(e.GetType());
            Console.WriteLine(e.Message);
            Console.WriteLine(e.StackTrace);
        }
        finally
        {
            Console.WriteLine("finallyブロック実行");
        }

    }
}

 

エラー発生
System.DivideByZeroException
0 で除算しようとしました。
   場所 MyMain.Main(String[] args)
finallyブロック実行

 

例外を発生させる

明示的に例外を発生させる場合は、例外オブジェクトをthrowする。
下の例は、Exceptionを継承したMyExceptionをthrowしている。

using System;

//例外処理(throw)

class MyException : Exception
{
    public new string Message{ get{ return "MyException例外です"; } }
}


class MyMain
{
    static void Main(string[] args)
    {
        try
        {
                throw new MyException();
        }
        catch( MyException e )
        {
            Console.WriteLine("エラー発生");
            Console.WriteLine(e.GetType());
            Console.WriteLine(e.Message);
            Console.WriteLine(e.StackTrace);
        }
        finally
        {
            Console.WriteLine("finallyブロック実行");
        }
    }
}

 

エラー発生
MyException
MyException例外です
   場所 MyMain.Main(String[] args)
finallyブロック実行