ฉันกำลังตรวจสอบโค้ดบางส่วนที่เขียนโดยที่ปรึกษาและในขณะที่มีธงสีแดงหลายสิบอันโผล่ขึ้นมาแล้วฉันไม่สามารถคาดเดาข้อมูลโค้ดต่อไปนี้ได้:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
lock (วัตถุใหม่ ()) กำลังทำอะไรที่นี่ ไม่ควรมีผลกระทบใด ๆ เนื่องจากมักจะล็อกวัตถุอื่นอยู่เสมอ แต่การล็อกแบบนี้จะคงอยู่ตลอดทั้งรหัสแม้ในส่วนที่ไม่ได้คัดลอกและวาง นี่เป็นกรณีพิเศษบางอย่างในภาษา C # ที่รวบรวมสิ่งที่ฉันไม่รู้หรือโปรแกรมเมอร์เพิ่งนำลัทธิขนส่งสินค้าบางอย่างที่เกิดขึ้นเมื่อไม่นานมานี้มาใช้?
new object()
ถูกเก็บไว้ที่ใดในฟิลด์และฟิลด์นั้นถูกใช้ในlock()
คำสั่งและพวกเขาไม่รู้ดีกว่าที่จะไม่อินไลน์มัน