Bir danışman tarafından yazılan bazı kodları gözden geçiriyorum ve düzinelerce kırmızı bayrak çoktan ortaya çıkmış olsa da, kafamı şu kod parçacığına dolayamıyorum:
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 ()) burada ne yapıyor? Her zaman başka bir nesneye kilitlendiği için herhangi bir etkisi olmamalıdır, ancak bu tür bir kilitleme, kopyala-yapıştır olmayan bölümlerde bile kod boyunca kalıcıdır. Bu C # dilinde bilmediğim bir şeye derlenen özel bir durum mu yoksa programcı bir süre önce işe yarayan bir kargo kültünü mi benimsedi?
new object()
bir tarlada saklandığını ve bu alanınlock()
ifadelerde kullanıldığını gördüler ve onu satır içine almamayı daha iyi bilmiyorlardı.