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);
使い分けのポイント
- 非静的クラス: データ(状態)を持ち、オブジェクトごとに異なる値を扱いたい場合に適しています。
- 静的クラス: ユーティリティ関数や数学計算など、状態を持たない共通処理をまとめたい場合に適しています。
このように、非静的クラスと静的クラスはそれぞれ役割が異なります。プログラムの設計意図に応じて適切に使い分けることで、より保守性の高いコードを書くことができます。
-
Javaのクラスメソッド(静的メソッド)とは?基本から使い方まで解説
Javaにおけるクラスメソッド(静的メソッド)とは、特定のオブジェクトのインスタンスではなく、クラスそのものに対して呼び出されるメソッドのことです。static修飾子を付けることで、すべてのクラスインスタンス間で同じ実装が保証されます。静的メソッドはインスタンス化せずに呼び出すことができるため、アクセスできるのはクラス内の他の静的メンバー(staticなフィールドやメソッド)のみです。インスタンス変数や非staticメソッドには直接アクセスできない点に注意しましょう。Javaの標準ライブラリにも多くの静的メソッドが用意されています。代表的な例としては、Math.random()、System.
-
Pythonの静的メソッド(@staticmethod)とは?仕組みと使い方を解説
Pythonのクラスには、インスタンスメソッド、クラスメソッド、静的メソッド(スタティックメソッド)という3種類のメソッドを定義できます。それぞれ役割や呼び出し方が異なり、適切に使い分けることでコードの可読性と保守性が向上します。3種類のメソッドの違いインスタンスメソッド: 第1引数に self を受け取り、オブジェクト(インスタンス)の状態にアクセス・変更できます。クラスメソッド: @classmethod デコレータを付け、第1引数に cls を受け取り、クラス自体の状態にアクセスできます。静的メソッド: @staticmethod デコレータを付け、self も cls も受け取りません