2022年01月28日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 816 count

throw文: あえて例外を自ら発生させる!

Written By: 川俣 晶連絡先

この章のテーマ §

 throw文について学びます。普段なら起きて欲しくない例外をあえて発生させることができます。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, 条件演算子, int型, for文, new 演算子, *=演算子. クラスの基礎, 継承の基礎

解説 §

 プログラムで何か想定外の異常な状態が起きた時、それを伝える方法は、大きく分けると特別な値を返す方法と、例外を発生させる方法があります。一般的には例外が重い処理であり利用は好まれませんが、希にしか起こらない場合などでは例外も使われます。

 ここで重要なことは以下の2点です。

  • 例外は自作できます
  • 例外は発生させたいときに発生できます

 例外を自作する場合は、Exceptionクラスを継承していくつかのメンバーを用意するだけです。ドキュメントに書かれたテンプレート通りに書くだけで、システムには存在しないあなただけの独自例外が作成できます。

 例外を発生させるには、throw文を使用します。例外クラスをnew演算して作成してthrow文で指定するとそれを発生できます。

罠の数々 §

  • もちろん、こうやって産み出された例外であっても、try-catch構文でキャッチできる
  • 繰り返すが、例外を使うのも使わないのもあなたの判断で決めて良い。逆にいえば、どちらが有利か判断するスキルは持っていた方が良い
  • throw文で使う例外はnew演算子で作成することが必須である。(希に特殊な使い方としてnew演算子を使わないケースもあり得る)
  • キャッチした例外を再発生させるときは、引数無しのthrow;で良い。扱えると思ってキャッチしたけど、やっぱり扱えないので例外を改めて発生させる時に便利

参考リンク §

例外の作成とスロー

サンプルソース: kw_throw §

int x = 1;

for (int i = 0; i < 8; i++)

{

    if (x > 100) throw new MySampleException("xが100を超えました。");

    x *= 2;

}

[Serializable]

public class MySampleException : Exception

{

    public MySampleException() : base() { }

    public MySampleException(string message) : base(message) { }

    public MySampleException(string message, Exception inner) : base(message, inner) { }

    // A constructor is needed for serialization when an

    // exception propagates from a remoting server to the client.

    protected MySampleException(System.Runtime.Serialization.SerializationInfo info,

        System.Runtime.Serialization.StreamingContext context) : base(info, context) { }

}

実行結果 (IDEで実行した場合は見え方が異なる) §

Unhandled exception. MySampleException: xが100を超えました。

at Program.<Main>$(String[] args) in C:\xgh\CSharpPrimer2\kw_throw\kw_throw\Program.cs:line 4

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 例外を発生させるときに指定する文字列として望ましい条件【ではないもの】を選べ。

  1. なぜ例外が起きたのか、理由をはっきりさせる
  2. 原因が明確に分かるようにする
  3. 利用者のIDとパスワードを必ず付ける
  4. 発生場所は別途用意されているので、特にメッセージに含める必要はない
  5. 例外処理中に例外が起きないように注意する (それはそのままではキャッチされない)

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
01月
29日
using文: 確実な終了処理の保証
3days 0 count
total 931 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
01月
27日
dynamic型: 型指定なんか忘れてしまえ!
3days 0 count
total 913 count

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

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

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

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

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

http://mag.autumn.org/tb.aspx/20220128105528
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

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