C# ではクラスのメンバーを static
として定義すると、インスタンスを生成しなくても利用できる「静的メンバー」になります。静的メンバーは共通の値や処理を扱いたいときに便利ですが、使い方を誤ると柔軟性を失うこともあります。本記事では static
の基本と使いどころを解説します。
staticメンバーとは?
通常のメンバー(インスタンスメンバー)はオブジェクトごとに独立した値を持ちますが、static
を付けるとすべてのインスタンスで共有されます。メソッドやプロパティ、フィールドに適用可能です。
class Counter
{
public static int Count = 0; // 静的フィールド
public Counter()
{
Count++;
}
}
class Program
{
static void Main()
{
new Counter();
new Counter();
Console.WriteLine(Counter.Count); // 2
}
}
この例ではインスタンスを 2 回生成していますが、Count
はクラス全体で共有されているため「2」と表示されます。
staticメソッド
static
を付けたメソッドはインスタンスを作らずに呼び出せます。代表例は Math
クラスのメソッドです。
Console.WriteLine(Math.Sqrt(16)); // 4
Console.WriteLine(Math.Max(3, 7)); // 7
このようにユーティリティ的な処理は static メソッドにすることでシンプルに利用できます。
staticプロパティ
プロパティにも static
を付けられます。例えばアプリ全体で共通する設定値などに利用します。
class AppConfig
{
public static string ApplicationName { get; set; } = "MyApp";
}
class Program
{
static void Main()
{
Console.WriteLine(AppConfig.ApplicationName); // MyApp
}
}
staticクラス
クラス自体を static
にすると、すべてのメンバーが静的になり、インスタンス化できなくなります。ユーティリティクラスに適しています。
static class StringHelper
{
public static string ToSnakeCase(string input)
{
return input.Replace(" ", "_").ToLower();
}
}
class Program
{
static void Main()
{
Console.WriteLine(StringHelper.ToSnakeCase("Hello World")); // hello_world
}
}
staticの使いどころ
- ユーティリティ処理 … 文字列処理や数学関数など、状態を持たない汎用的な処理
- 共通の設定値や定数 … アプリ全体で利用する定数や設定値
- 状態を共有するカウンタやキャッシュ … すべてのインスタンスで同じ値を参照したい場合
注意点
静的メンバーは便利ですが、多用するとオブジェクト指向の柔軟性を損なうことがあります。また、マルチスレッド環境では静的フィールドの共有による競合に注意が必要です。
まとめ
C# の static
は「インスタンスを作らなくても使える共通メンバー」を定義する仕組みです。ユーティリティ処理や共通の設定値に適しており、正しく使えばコードを簡潔かつ効率的に書けます。ただし過度に依存すると拡張性を失うため、使いどころを意識して活用しましょう。