日期:2014-05-19  浏览次数:20818 次

多路委托(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