使用我的自定义 EventArgs,例如:
public event EventHandler<MyEventArgs> SampleEvent;
来自msdn 例如:
public class HasEvent
{
// Declare an event of delegate type EventHandler of
// MyEventArgs.
public event EventHandler<MyEventArgs> SampleEvent;
public void DemoEvent(string val)
{
// Copy to a temporary variable to be thread-safe.
EventHandler<MyEventArgs> temp = SampleEvent;
if (temp != null)
temp(this, new MyEventArgs(val));
}
}
我有两个问题:
1)查看标记的代码:
我看不出为什么应该将它复制到另一个参数(关于线程)
因为我们有event
keyowrd ,所以没有人可以触摸它的调用列表(我的意思是类没有外部代码)
2)如果我没记错的话,这个 DemoEvent
函数应该是虚拟的,所以它可以在子类中被覆盖......(我确定我在某处见过它)
奇怪的是 resharper 也不会添加 virtual :
所以如果我有这个代码:
它建议我:
当我按下它时:
所以我的2 个问题:
EventHandler<MyEventArgs> temp = SampleEvent;
1)关于线程安全,这条线将解决什么场景 ?
2)功能不应该是virtual
吗?(我敢肯定我已经用虚拟看到过这种模式)