ReSharper 2025.3 ヘルプ

コード検査: 空のコンストラクター

クラス内に空のコンストラクターを(静的かどうかにかかわらず)持つことは冗長であり、ReSharper はその効果に対して警告を出します。

ただし、特殊なケースでは、空の静的コンストラクターを使用する必要があります。4.0 より前(つまり、Lazy<T> タイプが出現する前)の .NET バージョンでシングルトンパターンを実装しようとすると、次の構成が使用されることがあります。

class Singleton { static readonly Singleton instance = new Singleton(); private Singleton() {} public static Singleton Instance { get { return instance; } } static Singleton() { // this constructor is necessary } }

上では、空の静的コンストラクターは、実際には、遅延初期化を保証するために必要な詳細です。空の静的コンストラクターは、型が beforefieldinit フラグでマークされないようにします。タイプが beforefieldinit としてマークされていない場合、タイプのイニシャライザーメソッドは、静的フィールドまたはインスタンスフィールドへの最初のアクセス、またはインスタンスの最初の呼び出し、仮想メソッドまたは静的メソッドのいずれかによって実行されます。上記の例では、空のシングルトンは、最初にアクセスされたときにのみ型が初期化されることを保証します。

この動作を利用したい開発者は、この特定の警告を無効にする必要があります。C# 4.0 以降、シングルトンパターンを実装するより簡単で安全な方法があることに注意してください。

public class MyClass { private static readonly Lazy<MyClass> instance = new Lazy<MyClass>(() => new MyClass()); private MyClass(){} public static MyClass Instance { get { return instance.Value; } } }
2024 年 2 月 11 日