0

クラス階層とコードは次のようになります: また、GetInvocationList() を呼び出して、Main 関数で追加された委譲にバインドされている関数の数を確認する方法は?

namespace Test
{
    public class Program
    {
        public class SelectSet
        {
            public event SelectSet.AddedEventHandler Added;
            public delegate void AddedEventHandler(object BusinessObject);
        }

        public class C1
        {
            public static SelectSet SelectSet;
        }

        static void Main()
        {

        }
    }
}
4

2 に答える 2

1

また、GetInvocationList()を呼び出して、Main関数に追加された委任にバインドされている関数の数を確認するにはどうすればよいですか?

あなたは(少なくとも反省なしでは)できません、そしてあなたはそうすべきではありません。イベントを公開するポイントは、ハンドラーを追加または削除する機能のみを公開することです。つまり、コードが次のように記述されているのと少し似ています。

public class SelectSet
{
    // Private fields here

    public void AddAddedHandler(SelectSet.AddedEventHandler handler)
    {
        // Implement using private fields
    }

    public void RemoveAddedHandler(SelectSet.AddedEventHandler handler)
    {
        // Implement using private fields
    }

    public delegate void AddedEventHandler(object BusinessObject);
}

そのクラスを見ると、外部からはハンドラーが何であるかを見つけることができないことは明らかです。フィールドのようなイベントを宣言しているからといって、外の世界が自分のフィールドにアクセスできるわけではありません。

もちろん、必要に応じてハンドラーを明示的に公開することもできますが、それが良いアイデアになることはめったにありません。

詳細については、イベントとデリゲートに関する私の記事を参照してください。

于 2012-10-15T06:27:47.177 に答える
0

少なくとも VB では、デリゲートは として利用できるため、クラス内から直接Private <EventName>Event取得するか、外部からのリフレクションを使用して取得できます。AddedEvent.GetInvocationList

于 2012-10-18T03:02:12.850 に答える