有三个函数:A(string),B(string),C(string)
现定义一个委托: Action<string> D;
            D = A;
            D = D + B;
            D = D + C;
当执行D("my")时,三个都执行。但是,如何确定调用A、B、C三个中的哪个函数?

解决方案 »

  1.   

    D = A; //这句不就是指明调用的是A吗?难道还会调用B不成:
      

  2.   

    委托其实本身也是一个类,对于多播委托,可以使用 Delegate 的实例方法 GetInvocationList() 获取到一个委托数组,然后和方法比较,确定具体是哪一个方法:
    delegate void StringHandler(); class Program
    {
    static void Main(string[] args)
    {
    StringHandler sh = FunA;
    sh += FunB;
    sh += FunC; Delegate[] funs = sh.GetInvocationList();
    foreach (StringHandler item in funs)
    {
    if (item == FunA)
    {
    Console.WriteLine("執行方法 A");
    item();
    }
    }
    } static void FunA()
    {
    Console.WriteLine("A");
    } static void FunB()
    {
    Console.WriteLine("B");
    } static void FunC()
    {
    Console.WriteLine("C");
    }
    }
      

  3.   


    是连续执行A、B、C三个函数,不是仅执行A