Custom Exceptions
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の戻り値パスだけを確認すればよく、例外自体が無効な入力に対する観測可能な結果です。
チャレンジ
中級InvalidTemperatureException という名前のカスタム例外クラスを作成し、Exception を継承します。これには以下が必要です:
- メッセージを "Temperature is not valid." に設定するデフォルトのコンストラクタ。
- カスタムメッセージを受け取るコンストラクタ。
次に、checkTemperature という名前のメソッドを実装してください。このメソッドは:
- 摂氏の温度を表す整数パラメータを受け取ります
- 温度が -273 未満の場合、"Temperature below absolute zero!" というメッセージ付きで
InvalidTemperatureExceptionをスローします - 温度が有効な場合は true を返します
チートシート
カスタム例外を作成するには、Exception を継承するクラスを定義します:
public class InvalidAgeException : Exception
{
public InvalidAgeException() : base("Age is not valid.")
{
}
public InvalidAgeException(string message) : base(message)
{
}
}必要なときにカスタム例外をスローします:
int age = -5;
if (age < 0)
{
throw new InvalidAgeException("Age cannot be negative.");
}自分で試してみよう
using System;
class CheckTemperature
{
// ここにカスタム例外クラスを作成してください
public static bool checkTemperature(int celsius)
{
// ここにコードを記述してください
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety