2

1 つのクラスの 1 つのメソッドのみをデリゲートに登録する場合はdelegate.Target、. このデリゲートの購読者リストにアクセスする別の方法はありますか?

コードは次のとおりです。foreachループは実行時にnullに評価されています(コンパイルされます)

    public delegate void WriteMessage(string msg);

internal class Program
{
    private static void Main(string[] args)
    {
        var myClass = new MyClass();
        var writer = new WriteMessage(myClass.WriteMessage);

        writer += SaySomething; //method in this class
        writer += myClass.SayShit; //instance class
        writer += AnotherClass.Say; //static class

        foreach(string target in (string[])writer.Target)
        {
            Console.WriteLine(target);
        }

        Console.ReadLine();
    }

    private static void SaySomething(string msg)
    {
        Console.WriteLine("HI!!!!");
    }
}

完全なコード: http://pastebin.com/AzzRGMY9

4

2 に答える 2

4
Delegate[] list = delegate.GetInvocationList();

Delegateこれにより、オブジェクトの配列が取得され、これを使用してのリストを取得できますTarget

于 2012-06-12T21:07:37.753 に答える