Saya meninjau beberapa kode yang ditulis oleh seorang konsultan, dan sementara lusinan tanda bahaya telah muncul, saya tidak dapat memahami cuplikan berikut:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
Apa yang dilakukan kunci (objek baru ()) di sini? Seharusnya tidak berpengaruh apa pun karena selalu mengunci objek lain, tetapi jenis penguncian ini tetap ada di seluruh kode, bahkan di bagian yang tidak disalin dan ditempel. Apakah ini kasus khusus dalam bahasa C # yang dikompilasi menjadi sesuatu yang tidak saya ketahui, atau apakah pemrogram hanya mengadopsi beberapa kultus kargo yang kebetulan berfungsi beberapa waktu lalu?
new object()
disimpan di bidang, dan bidang itu digunakan dalamlock()
pernyataan, dan mereka tidak tahu lebih baik untuk tidak menyebarnya.