コンサルタントによって作成されたコードを確認しています。すでに数十の危険信号が表示されていますが、次のスニペットに頭を悩ませることはできません。
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
ここでlock(new object())は何をしていますか?常に別のオブジェクトをロックしているため、何の効果もありませんが、この種のロックは、コピーして貼り付けられていない部分であっても、コード全体で持続します。これは、私が知らないものにコンパイルされたC#言語の特殊なケースですか、それともプログラマーは、たまたま機能していたカーゴカルトを採用しただけですか?
new object()
がフィールドに格納されている場所でそれを見て、そのフィールドがlock()
ステートメントで使用されていたので、インライン化しないほうがよいとは知りませんでした。