コード検査: Double-Check Locking パターンの実装が間違っている可能性があります。チェックされたフィールドへの複数の書き込みアクセスが可能です。
次のコードを考えてみましょう。
public class Foo
{
private static Foo instance;
private static readonly object padlock = new object();
public static Foo Get()
{
if (instance == null)
{
lock (padlock)
{
if (instance == null)
{
instance = new Foo();
}
}
}
return instance;
}
};
上記のコードが与えられた場合、Foo インスタンスを初期化する書き込みはインスタンス値の書き込みまで遅延し、インスタンスが初期化されていない状態でオブジェクトを返す機能があります。
これを避けるには、インスタンス値を volatile にする必要があります。
2024 年 2 月 11 日
関連ページ:
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
コード検査: 循環コンストラクター呼び出しが可能
次の(合成された)コードスニペット class Base { Base(int n) : this(