Sto rivedendo del codice scritto da un consulente e, sebbene siano già spuntate dozzine di bandiere rosse, non riesco a capire il seguente frammento:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
Cosa ci fa lock (new object ()) qui? Non dovrebbe avere alcun effetto in quanto si blocca sempre su un altro oggetto, ma questo tipo di blocco è persistente in tutto il codice, anche nelle parti non copiate e incollate. È un caso speciale nel linguaggio C # compilato su qualcosa che non conosco, o il programmatore ha semplicemente adottato un culto del carico che è capitato di funzionare qualche tempo fa?
new object()era memorizzato in un campo, e quel campo è stato utilizzato nellelock()dichiarazioni, e non sapevano meglio non metterlo in linea.