将eventhandler转换为委托?

时间:2015-07-15 22:22:35

标签: c# event-handling eventhandler

我已经看到复数的一些程序员在执行之前将他们的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
                });
            }
        }

    }
}

1 个答案:

答案 0 :(得分:2)

强制转换(imo)毫无意义,但它被分配给局部变量的事实有一个值 - 它使调用线程安全。您可以更多地了解它here

如果您没有将事件处理程序分配给局部变量,并且有人在!= null检查和调用之间取消订阅了它的最后一个委托,那么您将获得异常。通过制作副本,您确信没有人在null检查和调用之间更改您知道的订阅者列表。