15

この質問に関連して 、イベントが既に存在するかどうかを確認してください

しかし、違いは、特定のメソッドがイベントに関連付けられているかどうかを知りたいだけです。したがって、他の方法が添付されている可能性がありますが、特定の方法が存在するかどうかを知りたいだけです。

私の環境は dotnet 4.0 の C# です。

例えば

Event += MyMethod1;
Event += MyMethod2;

// Some code
if (MyMethod1IsAttachedToEvent())
{
    // Achieved goal
}

これは可能ですか?

4

4 に答える 4

22

いいえ、あなたがすることはできません。

eventキーワードは、やりたいことを実行できないようにするために明示的に考案されました。イベントのデリゲート オブジェクトにアクセスできないため、誰もイベント ハンドラーをいじることはできません。

出典:イベントがすでに購読されているかどうかを判断する方法

于 2013-03-06T03:59:41.180 に答える
4
foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() )
{
    if ( existingHandler == prospectiveHandler )
    {
          return true;
    }
}

GetInvocationListメソッドを使用してデリゲートをループします。

于 2013-03-06T04:00:24.383 に答える
3
Event.GetInvocationList().Any(x => x.Method.Name.Equals("yourmethodname"));
于 2013-03-06T03:59:22.057 に答える