我看到了一些教程,我无法理解为什么他们建议从虚拟保护方法中提出事件,而不是直接,有什么区别?
public delegate void SomethingEventHandler(string s);
public event SomethingEventHandler Something;
public void Main() {
// Raising an event
OnSomething(); // Via method
Something("something"); // Directly
}
protected virtual void OnSomething()
{
Something("something");
}
Run Code Online (Sandbox Code Playgroud)
我想这主要是因为一个叫做"不要重复自己"(DRY)的基本原理.
例如:您必须NotifyPropertyChanged在属性值发生更改时引发事件.您希望从代码中的10个属性执行此操作.您可以重复从十种方法中提取该事件,或者调用一种方法为您执行此操作.如果你必须改变事件,你只需要做一次.
此外,通过它protected virtual,您可以在派生类中覆盖该功能.
另请注意,对于线程安全,您的加注应如下所示:
protected virtual void OnSomething()
{
EventHandler d = Something;
if (d != null)
{
d("something");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |