我正在审查由顾问编写的一些代码,虽然已经弹出了许多危险信号,但我无法将头包裹在以下代码片段中:
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()
语句中使用了该字段,而且他们不知道不要内联它也更好。