【C#】静的クラス(static class)の定義:インスタンス化できないユーティリティクラスの作り方

目次

静的クラスとは:newできないクラス

C#のクラスは通常、newキーワードを使ってインスタンス(オブジェクト)を生成してから使用します。しかし、数学関数(System.Math)やコンソール操作(System.Console)のように、データを保持せず、機能(メソッド)だけを提供したい場合、いちいちインスタンスを生成するのは非効率であり、コードの可読性も下がります。

このような場合に利用されるのが「静的クラス(static class)」です。

静的クラスは、クラスの宣言に static キーワードを付けることで定義され、以下の特徴を持ちます。

  1. インスタンス化できない: new MyClass() と書くとコンパイルエラーになります。
  2. 静的メンバーのみを含む: クラス内部のすべてのメソッド、プロパティ、フィールドにも static を付ける必要があります。
  3. クラス名から直接呼び出す: 機能を利用する際は MyClass.Method() のように記述します。

この記事では、消費税計算を行うユーティリティクラスを例に、静的クラスの定義と使用方法を解説します。


静的クラスの定義

静的クラスを定義するには、classキーワードの前にstaticを記述します。

コード例:消費税計算ユーティリティ

ここでは、消費税率を管理し、税込価格や税額を計算する TaxCalculator クラスを作成します。

using System;
using System.Globalization;

public class Program
{
    public static void Main()
    {
        // 日本円の通貨表示設定
        CultureInfo.CurrentCulture = new CultureInfo("ja-JP");

        decimal itemPrice = 1980m;

        // 静的クラスはインスタンス化 (new) せずに、クラス名から直接メソッドを呼び出す
        // var calculator = new TaxCalculator(); // これはコンパイルエラーになる

        decimal taxAmount = TaxCalculator.GetTaxAmount(itemPrice);
        decimal totalPrice = TaxCalculator.GetPriceWithTax(itemPrice);

        Console.WriteLine($"本体価格: {itemPrice:C}");
        Console.WriteLine($"消費税額: {taxAmount:C} (税率 {TaxCalculator.CurrentTaxRate * 100}%)");
        Console.WriteLine($"税込価格: {totalPrice:C}");
    }
}

/// <summary>
/// 消費税計算を提供する静的クラス
/// </summary>
public static class TaxCalculator
{
    // 1. 定数や静的フィールド
    // 現在の税率 (10%)
    public const decimal CurrentTaxRate = 0.10m;

    // 2. 静的メソッド
    // クラス内のメンバーはすべて 'static' でなければならない

    /// <summary>
    /// 税額を計算する(切り捨て)
    /// </summary>
    public static decimal GetTaxAmount(decimal price)
    {
        return Math.Floor(price * CurrentTaxRate);
    }

    /// <summary>
    /// 税込価格を計算する
    /// </summary>
    public static decimal GetPriceWithTax(decimal price)
    {
        decimal tax = GetTaxAmount(price);
        return price + tax;
    }
}

出力結果:

本体価格: ¥1,980
消費税額: ¥198 (税率 10%)
税込価格: ¥2,178

静的クラスの利点と用途

静的クラスは、主に以下の用途に適しています。

  • ユーティリティ(ヘルパー)クラス: 特定のオブジェクトの状態に依存しない、汎用的な処理(計算、ファイル操作、文字列変換など)をまとめる場合。
  • 定数クラス: アプリケーション全体で共有する定数値を管理する場合。
  • 拡張メソッドの定義: C#の拡張メソッドは、静的クラスの中に定義する必要があります。

静的コンストラクタ

静的クラスはインスタンス化されませんが、「静的コンストラクタ」を持つことはできます。 静的コンストラクタは、そのクラスのメンバーに初めてアクセスされたタイミングで、一度だけ自動的に実行されます。複雑な静的データの初期化が必要な場合に使用されます。

public static class AppConfig
{
    public static DateTime StartupTime { get; }

    // 静的コンストラクタ (アクセス修飾子は付けない)
    static AppConfig()
    {
        StartupTime = DateTime.Now;
        Console.WriteLine("設定を初期化しました。");
    }
}

まとめ

静的クラス(static class)は、インスタンス生成を禁止し、機能だけを提供するための仕組みです。

  • クラス定義に static を付けます。
  • すべてのメンバー(メソッド、プロパティ)にも static が必須となります。
  • ClassName.MethodName() の形式で、どこからでも簡潔に呼び出すことができます。

オブジェクトの状態(データ)を保持する必要がなく、入力に対して決まった出力を返すだけの「関数群」を定義する場合、静的クラスとして実装するのが最適です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次