C#でstaticクラスと通常クラスの違いを理解しよう
C#では、static
クラスという特別なクラスを作成することができます。static
メソッドを持つ通常のクラスとはどう違うのか、わかりやすく説明します。
目次
1. static
クラスとは?
- 完全に静的なクラスのことです。
- 全てのメンバー(フィールド、プロパティ、メソッド)が
static
でなければなりません。 - インスタンスを作成できません。
例: static
クラスの定義
static 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
ポイント:
MathUtils
はstatic
クラスなので、new MathUtils()
のようにインスタンスを作成することはできません。
2. 通常クラスとstatic
クラスの違い
特徴 | 通常クラス | static クラス |
---|---|---|
インスタンス作成 | 可能 | 不可能 |
メンバー | static メンバーとインスタンスメンバーを持てる | 全てのメンバーがstatic |
目的 | インスタンスごとのデータや動作を管理する | 共有データやユーティリティ機能を提供する |
継承 | 他のクラスを継承したり、継承元になることが可能 | 継承できない |
通常クラスの例
通常のクラスは、インスタンスを作成して使用します。また、static
メソッドとインスタンスメソッドの両方を持つことができます。
class MyClass
{
public int InstanceValue { get; set; } // インスタンスフィールド
public static string StaticValue = "共有データ"; // 静的フィールド
public void InstanceMethod()
{
Console.WriteLine($"インスタンス値: {InstanceValue}");
}
public static void StaticMethod()
{
Console.WriteLine($"静的値: {StaticValue}");
}
}
// 呼び出し例
MyClass obj = new MyClass();
obj.InstanceValue = 42;
obj.InstanceMethod(); // インスタンスメソッド呼び出し
MyClass.StaticMethod(); // 静的メソッド呼び出し
3. static
クラスを使うべき場面
3.1 ユーティリティクラス
- インスタンスを作る必要がない処理をまとめる場合に適しています。
- 例: 数学的な計算、文字列操作、設定管理など。
static class StringUtils
{
public static string ToUppercase(string input)
{
return input.ToUpper();
}
}
3.2 クラス全体で共有するデータやロジック
- 例えば、アプリケーション全体で使われるログ機能。
static class Logger
{
public static void Log(string message)
{
Console.WriteLine($"[LOG]: {message}");
}
}
4. 通常クラスとstatic
クラスの使い分け
使いたいケース | 選ぶべきクラス |
---|---|
インスタンスごとに異なるデータを管理する | 通常クラス |
インスタンスを作らず共通の機能を提供する | static クラス |
一部のメソッドだけをstatic にしたい | 通常クラス |
具体例: 数学的な処理を提供する場合
static
クラスを使う場合
static class MathUtils
{
public static int Add(int a, int b)
{
return a + b;
}
}
通常クラスを使う場合
class Calculator
{
private int lastResult;
public int Add(int a, int b)
{
lastResult = a + b; // インスタンスごとに結果を記録
return lastResult;
}
}
ポイント:
MathUtils
は常に同じ計算ロジックを提供します。Calculator
はインスタンスごとに計算履歴を管理します。
5. まとめ
static
クラス- 完全に静的なクラス。
- インスタンスを作らずに機能を提供する。
- 主にユーティリティや共有機能に適している。
- 通常クラス
- 静的メソッドとインスタンスメソッドを組み合わせて使用可能。
- インスタンスごとのデータを管理したい場合に使用。
static
クラスは「インスタンスを必要としない便利な機能を提供する道具箱」、通常クラスは「インスタンスごとに異なるデータや動作を管理するもの」として使い分けましょう!
ディスカッション
コメント一覧
まだ、コメントがありません