做多路委托(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
但是却不是!不知道多路委托本身就是这样呢,还是我用的不合适?
如果我想得到我预期的结果,应该怎么修改代码?
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
但是却不是!不知道多路委托本身就是这样呢,还是我用的不合适?
如果我想得到我预期的结果,应该怎么修改代码?
原因很简单,委托定义是string mydelegate(int i)只返回一个方法的返回值多播一般用在没有返回值的委托上。
---
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();
}
该版本软件不仅可以帮助你杀除恶意软件修补系统漏洞,还附赠价值320元的正版卡巴斯基软件哦,口碑好,完全免费。
“电脑学习网“版360安全卫士主要功能:
及时欣赏“电脑学习网“最新博客文章,了解“电脑学习网“最新心情动向
超强查杀数百款恶意软件,数千款流行木马
赠送价值320元的正版卡巴斯基杀毒V6.0,病毒库每小时更新,7*24小时全面服务
全面修复380个系统漏洞,系统更健壮更安全
mydele1 = Cmeth.meth;
mydele2 = Cmeth.meth2;
mydele3 = new delegate(int i)
{
mydele1(i) + mydele2(i);
};
Console.WriteLine(mydele3(200)); //只返回mydele2的值 Console.ReadLine();