Я просматриваю код, написанный консультантом, и, хотя уже появились десятки красных флажков, я не могу осмыслить следующий фрагмент:
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()
операторах, и они не знали, что лучше не вставлять его.