1
class Program
{
    delegate void StringProcessor(string input);

    class Person
    {
        string name;

        public Person(string name) { this.name = name; }

        public void Say(string message)
        {
            Console.WriteLine("{0} says: {1}", name, message);
        }
    }

    class Background
    {
        public static void Note(string note)
        {
            Console.WriteLine("({0})", note);
        }
    }

    static void Main(string[] args)
    {
        Person jon = new Person("Jon");
        Person tom = new Person("Tom");

        StringProcessor jonsVoice, tomsVoice, background;

        jonsVoice = new StringProcessor(jon.Say);
        tomsVoice = new StringProcessor(tom.Say);
        background = new StringProcessor(Background.Note);

        StringProcessor p = new StringProcessor(jonsVoice);
        p += tomsVoice;
        p -= jonsVoice;
        p("Hello");

    }
}

このプログラムは印刷します

Jon says: Hello
Tom says: Hello

それ以外の

Tom says: Hello

この削除は機能しません:p -= jonsVoice;

しかし、なぜ?

これを明確にするか、別のデリゲートを使用したデリゲートのインスタンス化に関する便利なリンクを入手してください。秘密情報に興味があります。

4

1 に答える 1