コード検査: [ThreadStatic] はインスタンスフィールドでは機能しません
ThreadStaticAttribute
は、フィールドをスレッドローカルにします。これは、すべてのスレッドがフィールドに対応する独自の参照を持つことを意味します。ThreadStaticAttribute
でマークされたフィールドは静的で、静的に初期化されていない必要があります。
この属性はインスタンスフィールドには影響しません。スレッドローカルインスタンスフィールドが必要な場合は、.NET 4.0 で導入された ThreadLocal<>
タイプを使用できます。
静的フィールドに初期化子がある場合、この初期化子は静的コンストラクターを実行するスレッドで 1 回のみ呼び出されます。すべてのスレッドで初期化が必要な場合、このフィールドは遅延初期化プロパティでカプセル化できます。
代わりに、ThreadLocal<>
クラスを使用することもできます(.NET 4.0 以降)。
関連ページ:
![](https://resources.jetbrains.com/help/img/dotnet/2024.1/inspection_severity_change.png)
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
![](https://pleiades.io/icons/resharper.png)
コード検査: コンストラクター内の仮想メンバーコール
Eric Lippert がこの投稿で説明しているように、基本型初期化子は派生型初期化子の後に実行されますが、コンストラクターは逆の順序で実行されます。つまり、派生型のコンストラクターは基本型のコンストラクターの後に呼び出されます。一方、仮想メソッドの呼び出しは、常に最も派生した型で実行されます。つまり、基本型のコンストラクターから仮想メンバーを呼び出す場合、派生型のコンストラクターが呼び出される前に、派生型のこの仮想メンバーのオーバーライドがそれぞれ実行されます。想像しているように、派生型のオ...