Tôi đang xem lại một số đoạn mã được viết bởi một chuyên gia tư vấn và trong khi hàng chục lá cờ đỏ đã xuất hiện, tôi không thể hiểu đoạn mã sau:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
Khóa (đối tượng mới ()) đang làm gì ở đây? Sẽ không có tác dụng gì vì nó luôn khóa trên một đối tượng khác, nhưng kiểu khóa này tồn tại liên tục trong suốt mã, ngay cả trong các phần không sao chép và dán. Đây có phải là một trường hợp đặc biệt nào đó trong ngôn ngữ C # được biên dịch cho một thứ gì đó mà tôi không biết về nó hay đơn giản là lập trình viên đã áp dụng một số hàng hóa sùng bái đã xảy ra cách đây một thời gian?
new object()
lưu trữ trong một trường và trường đó được sử dụng trong cáclock()
câu lệnh, và họ không biết tốt hơn là không nội dòng nó.