我已经看到复数的一些程序员在执行之前将他们的EventHandler转发给委托。为什么这是一个好习惯?通常我只是调用事件而不进行强制转换。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication13
{
public class Mediator
{
public event EventHandler<EmployeeArgs> EmployeeEventChange;
private static readonly Mediator _Instance = new Mediator();
private Mediator() { }
public static Mediator GetInstance()
{
return _Instance;
}
public void OnEmployeeHandler(Employee e)
{
var EmployeeEventDelegate = EmployeeEventChange as EventHandler<EmployeeArgs>;
if (EmployeeEventDelegate != null)
{
EmployeeEventDelegate(this, new EmployeeArgs()
{
Employee = e
});
}
}
}
}
答案 0 :(得分:2)
强制转换(imo)毫无意义,但它被分配给局部变量的事实有一个值 - 它使调用线程安全。您可以更多地了解它here。
如果您没有将事件处理程序分配给局部变量,并且有人在!= null
检查和调用之间取消订阅了它的最后一个委托,那么您将获得异常。通过制作副本,您确信没有人在null
检查和调用之间更改您知道的订阅者列表。