カテゴリ: C# 更新日: 2026/01/31

C#で独自の例外クラス(カスタム例外)を作成する方法を徹底解説!初心者向けガイド

C#で独自の例外クラス(カスタム例外)を作成する方法
C#で独自の例外クラス(カスタム例外)を作成する方法

先生と生徒の会話形式で理解しよう

生徒

「先生、C#のプログラムでエラーが起きたときに例外処理を使うことは分かってきたんですけど、自分専用のエラーを作ることはできるんですか?」

先生

「いい質問ですね。C#では、独自の例外クラス、いわゆるカスタム例外を作成することができます。」

生徒

「カスタム例外ってなんですか?普通の例外とどう違うんでしょうか?」

先生

「標準で用意されている例外(例えばArgumentNullExceptionInvalidOperationException)では表現しにくい、あなたのプログラム特有のエラーをわかりやすく扱うために使います。それでは詳しく見ていきましょう!」

1. 独自の例外クラスとは?

1. 独自の例外クラスとは?
1. 独自の例外クラスとは?

C#の独自の例外クラス(カスタム例外)とは、プログラマーが自分で新しく定義するエラーの種類のことです。通常、C#にはたくさんの組み込み例外クラスがありますが、それだけでは表現できない状況が出てくることがあります。

例えば、ゲームを作っていて「体力が0になったらエラーを発生させたい」と思った場合、標準の例外ではその状態を正しく表せません。そんなときに、PlayerDeadExceptionのように自分専用の例外を作ることができるのです。

カスタム例外を使うことで、エラーの意味がより明確になり、プログラムを読む人にとって理解しやすいコードになります。これはチーム開発でも特に役立ちます。

2. カスタム例外の作り方

2. カスタム例外の作り方
2. カスタム例外の作り方

独自の例外クラスを作成するには、Exceptionクラスを継承(けいしょう)します。継承とは「親クラスの機能を引き継いで新しいクラスを作ること」です。

基本的なコードの書き方は以下のようになります。


using System;

public class MyCustomException : Exception
{
    public MyCustomException() 
    {
    }

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

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

このコードでは、MyCustomExceptionという新しい例外クラスを作成しています。コンストラクタを複数用意しているのは、エラーメッセージや、別の例外を含めて伝えられるようにするためです。

3. カスタム例外を実際に使ってみよう

3. カスタム例外を実際に使ってみよう
3. カスタム例外を実際に使ってみよう

例として、銀行口座クラスを作り、「残高不足」のときに独自の例外を発生させるコードを書いてみましょう。


using System;

public class InsufficientBalanceException : Exception
{
    public InsufficientBalanceException(string message) : base(message)
    {
    }
}

public class BankAccount
{
    private int balance;

    public BankAccount(int initialBalance)
    {
        balance = initialBalance;
    }

    public void Withdraw(int amount)
    {
        if (amount > balance)
        {
            throw new InsufficientBalanceException("残高が不足しています。");
        }
        balance -= amount;
        Console.WriteLine($"{amount}円を引き出しました。残高: {balance}円");
    }
}

class Program
{
    static void Main()
    {
        BankAccount account = new BankAccount(1000);

        try
        {
            account.Withdraw(1500);
        }
        catch (InsufficientBalanceException ex)
        {
            Console.WriteLine("エラー発生: " + ex.Message);
        }
    }
}

このプログラムを実行すると、残高不足のときに独自のInsufficientBalanceExceptionが発生します。


エラー発生: 残高が不足しています。

4. カスタム例外を使うメリット

4. カスタム例外を使うメリット
4. カスタム例外を使うメリット

独自の例外クラスを作ると、次のようなメリットがあります。

  • エラーの意味が明確になる - 例外名を見ただけで原因がわかりやすい。
  • バグの調査がしやすくなる - どの種類のエラーかを判別できるため、問題の切り分けが簡単。
  • 再利用性が高まる - 似た処理で繰り返し利用できる。
  • チーム開発に役立つ - 他の人がコードを読んだときに理解しやすい。

例えば「残高不足」という状態を明確に表すInsufficientBalanceExceptionを作ることで、単なるExceptionよりもはるかにわかりやすくなります。

5. 注意点とベストプラクティス

5. 注意点とベストプラクティス
5. 注意点とベストプラクティス

独自の例外を作るときには、いくつかの注意点があります。

  • Exceptionを必ず継承する - 他のクラスから継承してしまうと正しく動作しません。
  • クラス名に「Exception」をつける - 慣習として、例外クラスの名前は◯◯Exceptionにします。
  • 意味のあるエラーメッセージを書く - 単なる「エラーです」ではなく、状況を具体的に説明するメッセージにしましょう。

このようにルールを守ってカスタム例外を作成すると、初心者でもエラー処理の理解が深まり、将来的に大規模なプログラムを書いたときにも役立ちます。

まとめ

まとめ
まとめ

C#で独自の例外クラスを作成する方法について、この記事では基礎から応用まで丁寧に解説しました。独自の例外クラスは、標準の例外では表しきれないエラー状態をわかりやすく伝えるための重要な仕組みです。特に大規模なアプリケーションや複数のプログラマーが参加する開発現場では、エラーの意味を正確に表現し、コードの可読性や保守性を高めるために欠かせない存在になります。ここでは、記事の内容を振り返りながら、補足となる知識や実際のプロジェクトで役に立つ使い方をさらに詳しくまとめていきます。

● カスタム例外の役割を深く理解しよう

独自の例外クラスは、ただ新しい名前のエラーを作るだけではありません。プログラムの中で「このエラーはこういう意味だ」と明確に伝えるための重要な要素であり、例外処理の質を大きく高めることができます。例えば、銀行アプリで「残高不足」という状態を表す場合、標準の例外を使うよりもInsufficientBalanceExceptionを使った方がはるかに直感的で、将来コードを読む人にも瞬時に意図が伝わります。

● サンプルプログラムで振り返り

ここでは、少し応用的なサンプルコードを用意しました。複数のカスタム例外を組み合わせて、エラーの種類をより細かく分類できる実践的な例です。


using System;

public class LowBalanceException : Exception
{
    public LowBalanceException(string message) : base(message) { }
}

public class NegativeAmountException : Exception
{
    public NegativeAmountException(string message) : base(message) { }
}

public class Wallet
{
    private int balance;

    public Wallet(int initial)
    {
        balance = initial;
    }

    public void Add(int amount)
    {
        if (amount < 0)
        {
            throw new NegativeAmountException("負の金額は追加できません。");
        }
        balance += amount;
    }

    public void Spend(int amount)
    {
        if (amount < 0)
        {
            throw new NegativeAmountException("負の金額は使用できません。");
        }
        if (amount > balance)
        {
            throw new LowBalanceException("所持金が不足しています。");
        }
        balance -= amount;
        Console.WriteLine($"{amount}円を使用しました。残額: {balance}円");
    }
}

class Program
{
    static void Main()
    {
        Wallet wallet = new Wallet(500);

        try
        {
            wallet.Spend(800);
        }
        catch (LowBalanceException ex)
        {
            Console.WriteLine("残額エラー: " + ex.Message);
        }
        catch (NegativeAmountException ex)
        {
            Console.WriteLine("金額エラー: " + ex.Message);
        }
    }
}

このコードでは、残額不足と不正な金額指定の2つを別々の例外として扱っています。これにより、エラーの種類がより明確になり、修正・調査がしやすくなるというメリットが生まれます。実際のプロジェクトでも、このように複数の独自例外を活用することで、大規模なシステムでもエラー処理が整理され、品質が飛躍的に向上します。

● 実務で役立つ考え方

カスタム例外は「必要なときにだけ作る」のが基本です。むやみに増やしすぎると逆にコードが複雑になってしまいます。ポイントは「その例外が存在することでコードの意味がより明確になるかどうか」です。例えば会員登録システムで、「入力値が無効」「年齢制限に該当」「メールアドレスが重複」など異なる種類のエラーを分類したい場合は、それぞれを独自の例外として定義すると整理しやすくなります。

先生と生徒の振り返り会話

生徒

「先生、独自の例外ってただ名前が違うだけじゃなくて、エラーの意味をはっきりさせるために使うんですね。」

先生

「その通りです。カスタム例外を作ることで、コードを読む人が状況を理解しやすくなります。特にチーム開発では欠かせない考え方ですよ。」

生徒

「例外クラスを継承して必要なコンストラクタを追加するだけで作れるので、思ったより簡単でした!」

先生

「簡単ですが効果は大きいです。たとえば今回の残額不足の例のように、意味のある名前を付けるだけでエラーの背景がすぐにわかります。」

生徒

「次からは、自分の作っているプログラムに合わせて、状況をより明確に表す例外を作ってみます!」

先生

「いいですね。状況に合わせて使い分けることが、より深い理解につながりますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#で独自の例外クラスとは何ですか?カスタム例外とどう違うのですか?

C#における独自の例外クラスとは、標準の例外クラスでは表現できない特定のエラーを開発者が自分で定義するクラスのことです。カスタム例外も同じ意味で使われます。
カテゴリの一覧へ
新着記事
New1
C#
C#でループの中に条件分岐を書く方法!入れ子制御構造の基本
New2
C#
C#のthrow文の基本!例外を自分で発生させる方法
New3
C#
C#のADO.NETの基礎!SqlConnectionとSqlCommandの使い方を初心者向けに徹底解説
New4
C#
C#の例外クラス階層を理解しよう!Exception・SystemExceptionの基本をやさしく解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.3
Java&Spring記事人気No3
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.4
Java&Spring記事人気No4
C#
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.5
Java&Spring記事人気No5
COBOL
COBOLのコンパイラと開発環境を徹底解説!初心者にもわかりやすい入門ガイド
No.6
Java&Spring記事人気No6
COBOL
COBOLの帳票レイアウトを美しく!可読性向上テクニックを徹底解説
No.7
Java&Spring記事人気No7
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.8
Java&Spring記事人気No8
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説