コード検査: ダブルチェックロックパターンの誤った実装の可能性: チェックされたフィールドへの可能な複数の書き込みアクセス。
次のコードを考えてみましょう。
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
にする必要があります。
関連ページ:
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、JetBrains Rider はサポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかにかかわらず、コードインスペクションを特定の範囲でいつでも実行できます。「鉛筆」ウィジェットを使用して、エディターから直接インスペクション設定をすばやく調整するか、設定でより詳細な構成を行うことができます。を押すか、メニューから(W...
コード検査: 循環コンストラクター呼び出しが可能
次の(合成された)コードスニペット class Base { Base(int n) : this("") { } Base (string s) : this(0) { } } いずれかのコンストラクターを呼び出すと、コンストラクターが互いに永久に呼び出すため、最終的なスタックオーバーフローが発生します。コード検査: 値型と「null」の可能な比較コード検査: ダブルチェックロックパターンの誤った実装の可能性: チェックされたフィールドへの複数の書き込み...