カスタム イベント引数クラスが から直接継承しているのに、イベントをサブスクライブするメソッドにカスタム イベント引数を直接渡すことができないのはなぜEventArgs
ですか?
たとえば、以下の 2 つのクラスを考えてみましょう。1 つは使用したいクラスで、もう 1 つは から継承され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
ますが、イベントをサブスクライブするメソッドの 2 番目のパラメーターをオブジェクトに変更するとMyCustomEvent
、コンパイル エラーが発生します。代わりに、クラス内の追加のフィールド/メソッドなどにアクセスEventArgs
する前に、オブジェクトを明示的にキャストする必要があります。MyCustomEvent
多数の異なるイベントを持つオブジェクトを操作する場合、それぞれのイベントに固有の関連するカスタムEventArgs
クラスがあり、各イベントをサブスクライブする各メソッドの EventArgs を何にキャストする必要があるかを追跡するのは少し面倒です。
カスタム EventArgs クラスを、イベントをサブスクライブするメソッドに直接渡すことができれば、はるかに簡単になります。
これは可能性がありますか?
ありがとう