Estoy revisando un código escrito por un consultor, y aunque ya han aparecido docenas de banderas rojas, no puedo entender el siguiente fragmento:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
¿Qué está haciendo lock (new object ()) aquí? No debería tener ningún efecto, ya que siempre se bloquea en otro objeto, pero este tipo de bloqueo es persistente en todo el código, incluso en partes que no se copian y pegan. ¿Es este un caso especial en el lenguaje C # que está compilado para algo que no conozco, o el programador simplemente adoptó algún culto de carga que funcionó hace algún tiempo?
new object()
estaba almacenado en un campo, y ese campo se usó en laslock()
declaraciones, y no sabían mejor no alinearlo.