カスタム例外
CoddyのC#ジャーニー「ロジックとフロー」セクションの一部。レッスン 29/66。
カスタム例外を使うと、アプリケーション固有のエラー状況に対応する特定の例外型を作成できます。
カスタム例外を作成するには、Exceptionを継承するクラスを定義します。継承とは、新しいクラスが親クラスのすべての動作(この場合はException)を自動的に受け継ぎつつ、機能を追加したりカスタマイズしたりできることを意味します。構文class MyException : Exceptionは、MyExceptionはExceptionを拡張することを意味します。
public class InvalidAgeException : Exception
{
public InvalidAgeException() : base("Age is not valid.")
{
}
public InvalidAgeException(string message) : base(message)
{
}
}: Exception:組み込みのExceptionクラスを継承します。: base(...):親クラスExceptionのコンストラクターを呼び出し、エラーメッセージを設定します。
最初のコンストラクターは、メッセージが指定されていない場合にデフォルトのメッセージを設定します。
2つ目のコンストラクターは、呼び出し元がエラーを詳しく説明できるようにカスタムメッセージを受け取ります。
必要なときに、カスタム例外をスローできるようになりました。
int age = -5;
if (age < 0)
{
throw new InvalidAgeException("Age cannot be negative.");
}このコードを負の年齢で実行すると、「Age cannot be negative.」というメッセージとともにカスタム例外がスローされます。
注: このレッスンの演習では、検証関数は入力が有効な場合にtrueを返し、無効な場合はカスタム例外をスローします。未処理の例外が発生すると実行が直ちに停止するため、テストケースではtrueを返す経路だけを検証すれば十分です。無効な入力に対しては、例外自体が観測可能な結果となります。
チャレンジ
中級Exception を継承する InvalidTemperatureException という名前のカスタム例外クラスを作成してください。次のものを持つ必要があります。
- メッセージ "Temperature is not valid." を設定するデフォルトコンストラクター
- カスタムメッセージを受け取るコンストラクター
次に、次の処理を行う checkTemperature という名前のメソッドを実装してください。
- 摂氏温度を表す整数型のパラメーターを受け取る
- 温度が -273 未満の場合、メッセージ "Temperature below absolute zero!" を含む
InvalidTemperatureExceptionをスローする - 温度が有効な場合は true を返す
自分で試してみよう
using System;
class CheckTemperature
{
// ここに独自の例外クラスを作成してください
public static bool checkTemperature(int celsius)
{
// ここにコードを記述してください
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: C#オンラインコンパイラ