3

私は現在sandpitting代表者です。
次の例では、dd参照p.m p.n?追加した後に再度
実行するために別の行を追加できますか?または、再度実装する必要がありますか?p.mp.nd dd = p.m;

class Program
{
    private delegate int d(int x);

    static void Main(string[] args)
    {
        Program p;
        p = new Program();

        d dd = p.m;//d dd = new d(p.m);
        Console.WriteLine(dd(3).ToString());

        dd += p.n;//dd += new d(p.n);
        Console.WriteLine(dd(3).ToString());

        //<<is there now a quick way to run p.m ?

        Console.WriteLine("press [enter] to exit");
        Console.ReadLine();
    }

    private int m(int y)
    {
        return y * y;
    }
    private int n(int y)
    {
        return y * y - 10;
    }
}
4

2 に答える 2

6

はい、最初の割り当て(d dd = this.m;)の後、を使用して行われたすべての割り当て+=も呼び出されます。

-=次のサンプルを参照して、を使用してメソッドを削除することができます。

d dd = p.m;//d dd = new d(p.m);
Console.WriteLine(dd(3).ToString()); //calls p.m

dd += p.n;//dd += new d(p.n);
Console.WriteLine(dd(3).ToString()); //calls boths p.m and p.n

dd -= p.n;
Console.WriteLine(dd(3).ToString()); // only calls p.m
于 2013-02-06T09:17:36.113 に答える
2
//is there now a quick way to run p.m ?

はい、daryalの投稿に加えて、これは(マルチキャストデリゲートを維持しながら)次の方法で実行できます。

p.GetInvocationList()[0].DynamicInvoke(new object[] { 3 });
于 2015-07-18T01:01:48.917 に答える