Menu
Coddy logo textTech

Custom Exceptions

CoddyのC#ジャーニー「ロジックとフロー」セクションの一部 — レッスン 29/66。

カスタム例外を使用すると、アプリケーション固有のエラーシナリオに特化した特定の例外タイプを作成できます。

カスタム例外を作成するには、Exception から継承するクラスを定義します。継承とは、新しいクラスが親クラスのすべての振る舞いを自動的に取得することを意味します — この場合、Exception — 同時に、機能の追加やカスタマイズを可能にします。構文 class MyException : ExceptionMyException が 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の戻り値パスだけを確認すればよく、例外自体が無効な入力に対する観測可能な結果です。

challenge icon

チャレンジ

中級

InvalidTemperatureException という名前のカスタム例外クラスを作成し、Exception を継承します。これには以下が必要です:

  1. メッセージを "Temperature is not valid." に設定するデフォルトのコンストラクタ。
  2. カスタムメッセージを受け取るコンストラクタ。

次に、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)
    {
        // ここにコードを記述してください
    }
    
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン