Ich überprüfe einen Code, der von einem Berater geschrieben wurde, und obwohl bereits Dutzende roter Fahnen aufgetaucht sind, kann ich mich nicht um das folgende Snippet kümmern:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
Was macht lock (new object ()) hier? Sollte keinerlei Auswirkungen haben, da immer ein anderes Objekt gesperrt wird. Diese Art der Sperre bleibt jedoch im gesamten Code bestehen, auch in nicht kopierten und eingefügten Teilen. Ist dies ein Sonderfall in der C # -Sprache, der zu etwas kompiliert wurde, von dem ich nichts weiß, oder hat der Programmierer einfach einen Frachtkult übernommen, der vor einiger Zeit funktioniert hat?
lock
new object()
in einem Feld gespeichert war, und dieses Feld wurde in denlock()
Anweisungen verwendet, und sie wussten nicht besser, es nicht zu inlineieren.