2020年11月21日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 998 count

【入門級】例外を自作する

Written By: 川俣 晶連絡先

 例外はエラーの発生を伝える手段です。

 システム側で定義されたいくつかの例外があります。0で割ったとか、ファイルが見つからない等です。しかし、いずれの条件にも当てはまらないエラーを自作ソースから発生させたいことがあります。

 そういう時は例外を自作できます。

 サンプルソースのMyExceptionクラスがその実例です。

 Exceptionクラスを継承すればそれも例外クラスになります。

 自作のクラスでもちゃんとthrow文で例外を発生できるし、try-catch構文でキャッチできます。

 自作例外の書き方はサンプルソースの通りです。このようなものだと思って下さい。

 名前を差し替えてこのまま使うこともできます。

 名前の最後はExceptionにしておいて下さい。

 実際に作ってみるとそれほど難しくはありません。

罠の数々 §

  • エラーが起きたときに例外を起こすことは必須ではない。たとえば、int.TryParseメソッドのように、変換でなかったことを戻り値で伝えるメソッドもある。例外以外の方法は取れないか検討しておこう
  • 自作例外クラスは実は不要であることも多い。区別する必要のない例外はまとめて一つの例外クラスで処理しても良い。たとえば、使えるメッセージだけが違う例外は区別する必要のない例外である

参考リンク §

ユーザー定義の例外を作成する方法

 実はこのサンプルソースの自作例外は十分ではない。このサンプルソースでは上手く動作しているが、実装内容や利用環境によって動作しないことがある。何が足りないのだろうか。上記のリンクから辿って足りないものの正体を確認しておこう。

リポジトリ §

https://github.com/autumn009/cshowto

MyException §

using System;

class MyException : Exception

{

    public MyException()

    {

    }

    public MyException(string message)

        : base(message)

    {

    }

    public MyException(string message, Exception inner)

        : base(message, inner)

    {

    }

}

class Program

{

    private static void sub(uint n)

    {

        if (n >= 1000) throw new MyException("sub メソッドが扱えるのは999までです。");

        Console.WriteLine($"[{n,3}]");

    }

    static void Main()

    {

        try

        {

            sub(9);

            sub(99);

            sub(999);

            sub(9999);

        }

        catch (MyException e)

        {

            Console.WriteLine(e.Message);

        }

    }

}

実行結果

[ 9]

[ 99]

[999]

sub メソッドが扱えるのは999までです。

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
23日
【入門級】属性を自作する
3days 0 count
total 1568 count
【C# コーディング How To】の前のコンテンツ
2020年
11月
20日
【入門級】別の機能で同じ結果を得る
3days 0 count
total 963 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20201121100309
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.