C#で静的メソッドとインスタンスメソッドを理解しよう

C#のプログラムでよく登場する「static」について、「静的メソッド」と「インスタンスメソッド」の違いをわかりやすく解説します。また、静的メソッド同士の関係についても触れます。


1. 静的メソッド (staticメソッド)とは?

  • クラスに属するメソッドで、インスタンスを作らなくても呼び出せます。
  • インスタンス固有のデータ(フィールドやプロパティ)にはアクセスできません
  • 他のstaticメソッドやstaticフィールドには自由にアクセスできます

静的メソッドの例

class MyClass
{
    public static void StaticMethod1()
    {
        Console.WriteLine("これはStaticMethod1です!");
    }

    public static void StaticMethod2()
    {
        // 同じクラス内の他の静的メソッドを呼び出せる
        StaticMethod1();
        Console.WriteLine("これはStaticMethod2です!");
    }
}

// 呼び出し例
MyClass.StaticMethod2();

出力:

これはStaticMethod1です!
これはStaticMethod2です!

2. インスタンスメソッドとは?

  • 特定のインスタンスに属するメソッドです。
  • インスタンス固有のデータ(フィールドやプロパティ)を操作できます。
  • インスタンスを作成してから呼び出します。

インスタンスメソッドの例

class MyClass
{
    private int instanceValue = 42; // インスタンスごとの値

    public void InstanceMethod()
    {
        Console.WriteLine($"インスタンスの値: {instanceValue}");
    }
}

// 呼び出し例
MyClass obj = new MyClass();
obj.InstanceMethod();

出力:

インスタンスの値: 42

3. 静的メソッドから呼べるもの、呼べないもの

呼べるもの

  1. 他の静的メソッド
    • 同じクラス内の静的メソッド同士は自由に呼び出せます。
    • インスタンスを必要としないため、安全に動作します。
  2. 静的フィールドや静的プロパティ
    • 静的フィールドもクラス全体に属するため、自由にアクセスできます。

呼べないもの

  • インスタンスメソッドやインスタンスフィールド
    • インスタンスが存在しないとアクセスできないため、静的メソッドからは直接呼べません。

静的メソッドからのアクセス例

class MyClass
{
    private static int staticValue = 100; // 静的フィールド
    private int instanceValue = 42;       // インスタンスフィールド

    public static void StaticMethod1()
    {
        Console.WriteLine($"静的フィールド: {staticValue}");
    }

    public static void StaticMethod2()
    {
        StaticMethod1(); // 他の静的メソッドを呼べる
    }

    public void InstanceMethod()
    {
        Console.WriteLine($"インスタンスフィールド: {instanceValue}");
    }

    public static void StaticMethod3()
    {
        // インスタンスメソッドは直接呼べない
        // InstanceMethod(); // コンパイルエラー

        // インスタンスを作れば呼び出せる
        MyClass obj = new MyClass();
        obj.InstanceMethod();
    }
}

4. 静的メソッドを使う場面

静的メソッドは次のような場面で使うのが便利です。

  1. インスタンスに依存しない処理
    • 例: 数学的な計算、日付や文字列の操作。
  2. クラス全体で共有する処理
    • 例: ログ記録、設定の管理。

静的メソッドの活用例

class MathUtils
{
    public static int Add(int a, int b)
    {
        return a + b;
    }

    public static int Multiply(int a, int b)
    {
        return a * b;
    }
}

// 呼び出し例
int sum = MathUtils.Add(3, 5);         // 結果: 8
int product = MathUtils.Multiply(3, 5); // 結果: 15
Console.WriteLine($"合計: {sum}, 積: {product}");

5. まとめ

静的メソッド (static)

  • クラスに属し、インスタンスを必要としない。
  • 他の静的メンバー(メソッド、フィールド)には自由にアクセスできる。
  • インスタンス固有のデータは直接扱えない。

インスタンスメソッド

  • 特定のインスタンスに属し、そのインスタンスのデータを操作できる。
  • インスタンスを作成しなければ使えない。

ポイント: 静的メソッド同士は仲間!

  • 静的メソッドからは、他の静的メソッドや静的フィールドを自由に使えるというルールを覚えましょう!