首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

多路委托(delegate)的有关问题

2011-12-26 
多路委托(delegate)的问题做多路委托(delegate)的练习:classProgram{delegatestringmydelegate(inti)//定

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


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();
}

[解决办法]
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();

[解决办法]
多路委托只能返回一个值

而且大多数情况下多路委托返回的是void

热点排行