//多播委托事件
为什么总是提示无法将类型"void隐式转换为"MyEventHandler"呢
using System;
delegate void MyEventHandler();//为事件处理程序声明委托
//定义委托类
class MyEvent
{
    public event MyEventHandler SomeEvent;//声明事件对象
    public void OnSomeEvent()//触发事件方法
    {
        if (SomeEvent != null)
        {
            SomeEvent();
        }
    }
}
class X
{
    public void Xhandler()
    {
        Console.WriteLine("Event received by X object");    }
}
class Y
{
    public void Yhandler()
    {
        Console.WriteLine("Event received by Y object");
    }
}
class EventDemo2
{
    static void handler()
    {
        Console.WriteLine("Event received by EventDemo");
    }
    public static void Main()
    {
        MyEvent evt = new MyEvent();
        X xob = new X();
        Y yob = new Y();
        evt.SomeEvent += handler();//注册事件方法
        evt.SomeEvent += xob.Xhandler();
        evt.SomeEvent += yob.Yhandler();
        evt.OnSomeEvent();
        Console.WriteLine();
      
        evt.SomeEvent -= xob.Xhandler();
        evt.OnSomeEvent();
        Console.Read();
    }
}

解决方案 »

  1.   

    using System; 
    delegate void MyEventHandler();//为事件处理程序声明委托 
    //定义委托类 
    class MyEvent 

        public event MyEventHandler SomeEvent;//声明事件对象 
        public void OnSomeEvent()//触发事件方法 
        { 
            if (SomeEvent != null) 
            { 
                SomeEvent(); 
            } 
        } 

    class X 

        public void Xhandler() 
        { 
            Console.WriteLine("Event received by X object");     } 

    class Y 

        public void Yhandler() 
        { 
            Console.WriteLine("Event received by Y object"); 
        } 

    class EventDemo2 

        static void handler() 
        { 
            Console.WriteLine("Event received by EventDemo"); 
        } 
        public static void Main() 
        { 
            MyEvent evt = new MyEvent(); 
            X xob = new X(); 
            Y yob = new Y(); 
           evt.SomeEvent +=new MyEventHandler(handler);//注册事件方法
             evt.SomeEvent += new MyEventHandler(xob.Xhandler); 
            evt.SomeEvent += new MyEventHandler(yob.Yhandler); 

            evt.OnSomeEvent(); 
            Console.WriteLine();     } 
    }
      

  2.   

    evt.SomeEvent += xob.Xhandler); 
            evt.SomeEvent += yob.Yhandler);