读书人

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

发布时间: 2011-12-26 23:09:59 作者: rapoo

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

读书人网 >C#

热点推荐