黑马程序员技术交流社区
标题:
多播委托返回值的问题
[打印本页]
作者:
hehe04
时间:
2012-8-24 11:51
标题:
多播委托返回值的问题
我听人家讲多播委托不可以有返回值
但为什么我这里有,而且返回值不同,还可以编译通过,运行也没什么问题?是因为我没有用到返回值吗??
delegate double meixin(string a);
class Program
{
static void Main(string[] args)
{
//使用匿名函数定义委托
meixin meixin=delegate(string a){return 0; };
//普通的委托定义
meixin meixin2 =new meixin( Cat.a);
meixin2("33");
Cat Cat1 = new Cat();
meixin meixin3 = Cat1.b;
meixin3("xxx");
//下面是+=,-=的用法,测试不同返回值的多播委托
Console.WriteLine("下面是+=,-=的用法,测试不同返回值的多播委托");
meixin2 += Cat1.b;
meixin2("cat1");
//再实例化一个CAT类的对象,将它的b方法添加到委托meixin3中来
Console.WriteLine("添加不同对象的方法");
Cat cat2 = new Cat();
meixin3 += cat2.b;
meixin3("cat2");
//lambda表达式
meixin3 = (string a) => { Console.WriteLine("lambda"); return 3; };
}
}
class Cat
{
static public double a(string a)
{
Console.WriteLine("Cat类的静态方法a");
return 1;
}
public double b(string a)
{
Console.WriteLine("Cat类的普通方法b");
return 0;
}
}
复制代码
作者:
许庭洲
时间:
2012-8-24 13:34
C#多播委托声明的返回值必须为void
作者:
hehe04
时间:
2012-8-24 14:02
这算什么回答
作者:
hehe04
时间:
2012-8-24 14:05
我意思是我定义的依托是不是void 一样可以+= 而且 两个方法的返回值不同
作者:
刘逍遥
时间:
2012-8-24 21:33
许庭洲 发表于 2012-8-24 13:34
C#多播委托声明的返回值必须为void
可以不定义为void :最后调用的方法,的返回值会被接收到,在这期间的会被忽略而已,
实际开发中,没有人那么变态的,还要去取的多播结果的返回值
作者:
刘逍遥
时间:
2012-8-24 21:42
可以不定义为void 举例:
class test
{
public static int Add(int x)
{
return x++;
}
}
static void Main()
{
delegate int MyDel(int num);
MyDel del=Add;
Console.WriteLine("{0}",del(1)); //============>输出结果为2
}
上面的例子说明可以不为void 只是太多的方法,在执行过程中的返回值被忽略【但是其值是存在的】,只有最后一个会被接收到,要的话 我还可以给你写例子
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2