Bạn chỉ có thể truy cập một sự kiện trong lớp khai báo, vì .NET tạo các biến cá thể riêng tư đằng sau các cảnh thực sự giữ đại biểu. Làm điều này ..
public event EventHandler MyPropertyChanged;
đang thực sự làm điều này;
private EventHandler myPropertyChangedDelegate;
public event EventHandler MyPropertyChanged
{
add { myPropertyChangedDelegate += value; }
remove { myPropertyChangedDelegate -= value; }
}
và làm điều này ...
MyPropertyChanged(this, EventArgs.Empty);
thực ra đây là ...
myPropertyChangedDelegate(this, EventArgs.Empty);
Vì vậy, bạn có thể (rõ ràng) chỉ truy cập vào biến đối tượng ủy nhiệm riêng từ bên trong lớp khai báo.
Quy ước là cung cấp một cái gì đó như thế này trong lớp khai báo ..
protected virtual void OnMyPropertyChanged(EventArgs e)
{
EventHandler invoker = MyPropertyChanged;
if(invoker != null) invoker(this, e);
}
Sau đó, bạn có thể gọi OnMyPropertyChanged(EventArgs.Empty)từ bất cứ nơi nào trong lớp đó hoặc bên dưới quyền thừa kế thừa kế để gọi sự kiện.