为什么我不能直接将自定义事件参数传递给订阅我的事件的方法,即使我的自定义事件 args 类直接继承自EventArgs?
例如,考虑以下两个类。一个是我要使用的类,另一个继承自EventArgs,并包含一些与事件相关的附加信息:
using System;
namespace ConsoleApplication11
{
    class MyClass
    {
        public event EventHandler MyEvent;
        public void MyMethod(int myNumber)
        {
            Console.WriteLine(myNumber);
            if(myNumber == 7)
            {
                MyEvent.Invoke(null, new MyCustomEvent() { Foo = "Bar" });
            }
        }
    }
    class MyCustomEvent : EventArgs
    {
        public string Foo { get; set; }
    }
}
因此,如果将数字 7 传递给MyMethod,我想调用MyEvent将MyCustomEvent类的新实例传递给订阅我的事件的任何方法。
我从我的主程序中订阅了这个,如下所示:
using System;
namespace ConsoleApplication11
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass myClass = new MyClass();
            myClass.MyEvent += new EventHandler(myClass_MyEvent);
            for (int i = 0; i < 9; i++)
            {
                myClass.MyMethod(i);
            }
        }
        static void myClass_MyEvent(object sender, EventArgs e)
        {
            //Do Stuff
        }
    }
}
即使我在MyCustomEvent调用事件时传入了一个对象,如果我将订阅我的事件的方法中的第二个参数更改为一个MyCustomEvent对象,我会得到一个编译错误。我需要将EventArgs对象显式转换为 a MyCustomEvent,然后才能访问类中的任何其他字段/方法等。
当使用具有许多不同事件的对象时,每个事件都有一个唯一相关的自定义EventArgs类,跟踪每个订阅每个事件的方法中的 EventArgs 需要强制转换可能会有点混乱。
如果我可以将我的自定义 EventArgs 类直接传递到订阅我的事件的方法中,那会容易得多。
这是一种可能吗?
谢谢