当我有代表
时public delegate void PrintMe();
(1)
PrintMe a = delegate() { MessageBox.Show("Hello"); };
a();
(2)
PrintMe b = () => { MessageBox.Show("Hello"); };
b();
(3)
PrintMe c = new PrintMe(HelpMe);
c();
static void HelpMe()
{
MessageBox.Show("Help Me");
}
for(1)and(2)我没有实例化它直接指向匿名方法的委托。但是在(3)的情况下,我需要实例化委托并传递静态方法。对于案例(3)我不能像PrintMe c= HelpMe(); ?
那样声明。(1)和(2)如何工作?
答案 0 :(得分:3)
由于方法组和委托之间的隐式转换,您可以说
(3)
PrintMe c = HelpMe;
即。没有括号
答案 1 :(得分:1)
PrintMe c = HelpMe;
答案 2 :(得分:1)
在(1)和(2)中,编译器隐式将lambda表达式转换为委托。
如果您尝试
PrintMe c= HelpMe();
然后您告诉编译器生成对HelpMe的调用,并将该调用的结果分配给c
。
相反,你可以做
PrintMe c = HelpMe;
这里,HelpMe
会出现所谓的方法组(它不仅仅是一个方法,因为它可能有重载),如果有的话可以转换为委托组中至少有一个方法适合代表。