做多路委托(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
但是却不是!不知道多路委托本身就是这样呢,还是我用的不合适?
如果我想得到我预期的结果,应该怎么修改代码?

解决方案 »

  1.   

    呵呵,方法是mydele1 + mydele2都调用了,但是只返回后一个委托对象的返回值
    原因很简单,委托定义是string mydelegate(int i)只返回一个方法的返回值多播一般用在没有返回值的委托上。
      

  2.   

    xiaxilin(彩色电脑) 说的对。lz想得到
    ---
    i=200
    j=200
    这个结果需要将代码改一下
    delegate void mydelegate(int i); //定义一个委托(带参数)class Cmeth
    {
    public static void meth(int i)
    {
    Console.WriteLine("---");
    Console.WriteLine("i=" + i.ToString());
    }public static void meth2(int j)
    {
    Console.WriteLine( "j=" + j.ToString());
    }}static void Main(string[] args)
    {
    mydelegate mydele1, mydele2, mydele3;
    mydele1 = new mydelegate(Cmeth.meth);
    mydele2 = new mydelegate(Cmeth.meth2);
    mydele3 = mydele1 + mydele2; mydele3(200); //只返回mydele2的值
            Console.ReadLine();
    }
      

  3.   

    IntelliSense(Sense):你没改什么呀?还是原来的结果呀?
      

  4.   

    奇虎公司为了感谢鄙人对360安全卫士的杰出贡献,特发布了“电脑学习网”版360安全卫士。下载地址是:http://my.360safe.com/download.html?id=35138
    该版本软件不仅可以帮助你杀除恶意软件修补系统漏洞,还附赠价值320元的正版卡巴斯基软件哦,口碑好,完全免费。
     
    “电脑学习网“版360安全卫士主要功能: 
       及时欣赏“电脑学习网“最新博客文章,了解“电脑学习网“最新心情动向 
       超强查杀数百款恶意软件,数千款流行木马 
       赠送价值320元的正版卡巴斯基杀毒V6.0,病毒库每小时更新,7*24小时全面服务 
       全面修复380个系统漏洞,系统更健壮更安全
      

  5.   

    mydelegate mydele1, mydele2, mydele3;
                mydele1 = Cmeth.meth;
                mydele2 = Cmeth.meth2;
                mydele3 = new delegate(int i)
    {
     mydele1(i) + mydele2(i);
    };
                Console.WriteLine(mydele3(200));  //只返回mydele2的值            Console.ReadLine();
      

  6.   

    多路委托只能返回一个值而且大多数情况下多路委托返回的是void