静的クラスの使い方と活用例
目次
静的クラスの特徴
- インスタンス化不可
- 静的クラスはインスタンスを作成できません。全てのメンバーは静的(
static
)である必要があります。
- 静的クラスはインスタンスを作成できません。全てのメンバーは静的(
- ユーティリティ的な役割
- 主に共通のメソッドやデータを提供するために使用されます。
- 継承不可
- 静的クラスは他のクラスを継承したり、継承されたりすることはできません。
- シングルトンの代替になり得る
- 状態を持たない場合、シングルトンパターンの代わりとして利用できます。
静的クラスの主な使い道
1. ユーティリティクラス
よく使用される汎用的なメソッドや定数をまとめるために利用します。
public static class MathUtilities
{
public static int Add(int a, int b)
{
return a + b;
}
public static int Subtract(int a, int b)
{
return a - b;
}
}
// 使用例
int result = MathUtilities.Add(5, 3);
Console.WriteLine(result); // 出力: 8
2. 定数をまとめるクラス
プログラム内で使用する定数を一箇所にまとめることで、保守性が向上します。
public static class Constants
{
public const string AppName = "MyApplication";
public const int MaxUsers = 100;
}
// 使用例
Console.WriteLine(Constants.AppName);
3. 拡張メソッド
静的クラスは拡張メソッドを定義する際に必要です。拡張メソッドを使うと、既存のクラスに新しいメソッドを追加したように見せることができます。
public static class StringExtensions
{
public static string Reverse(this string str)
{
char[] charArray = str.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
}
// 使用例
string text = "Hello";
Console.WriteLine(text.Reverse()); // 出力: olleH
4. シングルトンパターンの一部
状態を持たない場合は静的クラスがシングルトンの代わりになります。状態を持つ場合は静的メンバーを活用します。
public static class Logger
{
public static void Log(string message)
{
Console.WriteLine($"[LOG]: {message}");
}
}
// 使用例
Logger.Log("This is a log message.");
5. グローバルな設定管理
プログラム全体で使用する設定値を管理します。
public static class Config
{
public static string ConnectionString { get; set; }
}
// 使用例
Config.ConnectionString = "Server=myServer;Database=myDB;";
Console.WriteLine(Config.ConnectionString);
注意点
- 乱用しない
- 静的クラスを多用すると、依存関係が複雑化し、テストが難しくなる可能性があります。
- 状態を持たない設計
- 静的クラスは状態(フィールドなど)を持たないユーティリティ的な役割が適しています。
- 状態を持つ場合はスレッドセーフを考慮する必要があります。
- テスト困難性
- インスタンスを持たないため、モック化が難しく、単体テストの柔軟性が低下します。
静的クラスは適切な場面で使用すれば非常に便利なツールですが、乱用は避け、目的に応じてクラスの設計を行うことが重要です。
ディスカッション
コメント一覧
まだ、コメントがありません