多路委托(delegate)的问题
做多路委托(delegate)的练习:
class Program
{
delegate string mydelegate(int i); //定义一个委托(带参数)
static class Cmeth
{
public static string meth(int i)
{
Console.WriteLine( "--- ");
return "i= " + i.ToString();
}
public static string meth2(int j)
{
return "j= " + j.ToString();
}
}
static void Main(string[] args)
{
mydelegate mydele1, mydele2, mydele3;
mydele1 = Cmeth.meth;
mydele2 = Cmeth.meth2;
mydele3 = mydele1 + mydele2;
Console.WriteLine(mydele3(200)); //只返回mydele2的值
Console.ReadLine();
}
}
运行结果如下:
---
j=200
由于使 mydele3 包含了2个方法的调用(确实调用了!),但是返回值却只有mydele2的。
我认为结果应该是:
---
i=200j=200
但是却不是!不知道多路委托本身就是这样呢,还是我用的不合适?
如果我想得到我预期的结果,应该怎么修改代码?
------解决方案--------------------没这样用过,也没见过这样用的!
------解决方案--------------------呵呵,方法是mydele1 + mydele2都调用了,但是只返回后一个委托对象的返回值
原因很简单,委托定义是string mydelegate(int i)
只返回一个方法的返回值
多播一般用在没有返回值的委托上。
------解决方案--------------------匹配方法的返回只有一个值.. 即使实现了多委托内容结果还是返回一个
------解决方案--------------------xiaxilin(彩色电脑) 说的对。lz想得到
---
i=200