使用具有返回值的多个函数调用委托

hel*_*rld 7 c# delegates

我试图理解代表的概念,并得到一个查询.假设我们将一个委托定义为返回类型为int,并接受int类型的2个参数.

代表声明:

 public delegate int BinaryOp(int x, int y); 
Run Code Online (Sandbox Code Playgroud)

现在,假设我们有两个方法(加法和乘法)都接受2个int参数并返回一个int结果.

码:

    static int Add(int x, int y)  
   {     
        return x + y; 
    }  

    static int Multiply(int x, int y)  
   {     
        return x * y; 
    }  
Run Code Online (Sandbox Code Playgroud)

现在,当add和multiply方法被添加到此委托中时,然后当委托被调用时,如:

BinaryOp b = new BinaryOp(Add);
b+=new BinaryOp(Multiply);

int value=delegate_name(2,3);
Run Code Online (Sandbox Code Playgroud)

然后,根据我的理解,这两种方法都被调用.现在,两个方法中的哪一个存储在值变量中?或者它在这种情况下返回一个数组?

Ale*_*lex 7

实际上,通过一些技巧和强制转换,你可以获得如下所有结果:

var b = new BinaryOp(Add);
b += new BinaryOp(Multiply);

var results = b.GetInvocationList().Select(x => (int)x.DynamicInvoke(2, 3));
foreach (var result in results)
    Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

随着输出:

5
6
Run Code Online (Sandbox Code Playgroud)


Asa*_*din 5

您将获得添加到多播委托中的最后一个方法的返回值。在这种情况下,您将获得的返回值Multiply

有关更多信息,请参阅文档:https : //msdn.microsoft.com/zh-cn/library/ms173172.aspx