C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の非静的クラスとは?静的クラスとの違いをわかりやすく解説

C#における「非静的クラス(non-static class)」とは、インスタンス化が可能な通常のクラスのことです。対照的に、staticキーワードを付けた静的クラスはインスタンスを作成できません。本記事では、非静的クラスの基本概念と、静的クラスとの主な違いについて解説します。

非静的クラスの特徴

非静的クラスは、newキーワードを使用してオブジェクト(インスタンス)を生成できます。これにより、クラス内で定義されたインスタンスメンバーにアクセスできるようになります。

1. インスタンス化が可能

非静的クラスでは、以下のようにnewキーワードを使って変数を作成できます。

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

// インスタンス化して使用する
Calculate calc = new Calculate();
int result = calc.Add(3, 5); // result = 8

2. インスタンスメソッドと静的メソッドの両方を持てる

非静的クラスには、インスタンスメソッドと静的メソッドの両方を定義できます。インスタンスメソッドはオブジェクトごとに呼び出され、静的メソッドはクラス名から直接呼び出します。

public class Calculate
{
    // インスタンスメソッド
    public int Multiply(int a, int b)
    {
        return a * b;
    }

    // 静的メソッド
    public static int Subtract(int a, int b)
    {
        return a - b;
    }
}

静的クラスとの主な違い

項目非静的クラス静的クラス
インスタンス化可能(new キーワードを使用)不可能
メンバーの種類インスタンスメンバーと静的メンバーの両方静的メンバーのみ
メンバーへのアクセスオブジェクト経由、またはクラス名経由クラス名そのものを使ってアクセス
継承可能不可(暗黙的にsealed)

静的クラスのメンバーには、クラス名そのものを使ってアクセスします。また、静的クラスはsealed(シールド)として暗黙的に宣言されるため、継承することもできません。

静的クラスの例

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

// クラス名から直接呼び出す
int sum = Calculate.Add(3, 5);

使い分けのポイント

  • 非静的クラス: データ(状態)を持ち、オブジェクトごとに異なる値を扱いたい場合に適しています。
  • 静的クラス: ユーティリティ関数や数学計算など、状態を持たない共通処理をまとめたい場合に適しています。

このように、非静的クラスと静的クラスはそれぞれ役割が異なります。プログラムの設計意図に応じて適切に使い分けることで、より保守性の高いコードを書くことができます。

  1. Javaのクラスメソッド(静的メソッド)とは?基本から使い方まで解説

    Javaにおけるクラスメソッド(静的メソッド)とは、特定のオブジェクトのインスタンスではなく、クラスそのものに対して呼び出されるメソッドのことです。static修飾子を付けることで、すべてのクラスインスタンス間で同じ実装が保証されます。静的メソッドはインスタンス化せずに呼び出すことができるため、アクセスできるのはクラス内の他の静的メンバー(staticなフィールドやメソッド)のみです。インスタンス変数や非staticメソッドには直接アクセスできない点に注意しましょう。Javaの標準ライブラリにも多くの静的メソッドが用意されています。代表的な例としては、Math.random()、System.

  2. Pythonの静的メソッド(@staticmethod)とは?仕組みと使い方を解説

    Pythonのクラスには、インスタンスメソッド、クラスメソッド、静的メソッド(スタティックメソッド)という3種類のメソッドを定義できます。それぞれ役割や呼び出し方が異なり、適切に使い分けることでコードの可読性と保守性が向上します。3種類のメソッドの違いインスタンスメソッド: 第1引数に self を受け取り、オブジェクト(インスタンス)の状態にアクセス・変更できます。クラスメソッド: @classmethod デコレータを付け、第1引数に cls を受け取り、クラス自体の状態にアクセスできます。静的メソッド: @staticmethod デコレータを付け、self も cls も受け取りません