昨天我遇到了这种情况,它一直在啃着我。当编译器调用一个Action时,编译器不会抱怨对我的DoThis方法使用函数的引用,而我的理解是一个带有'void'返回类型的委托。
DoThis函数上的Action参数究竟发生了什么?
public class testit
{
// Call DoThis with just a function reference. Should not work, but does.
public void DoThisThing1() {
DoThis(this.thing1);
}
// Call DoThis with an action. This is correct.
public void DoThisThing2() {
DoThis(new Action<string, string>(this.thing2));
}
private void DoThis(Action<string, string> thing)
{
// Do some common things here.
// Invoke Action
thing.Invoke("1", "2");
// Do other things.
}
private void thing1(string p1, string p2){}
private void thing2(string p1, string p2){}
}
答案 0 :(得分:7)
如果您的问题是有效的原因:
DoThis(this.thing1);
那是隐含的:
DoThis(new Action<string,string>(this.thing1));
(其中委托类型是从DoThis
)
简单地说:编译器为我们填写了一些东西 - 自C#2以来就存在的语法糖。在C#1.1中,它不会被编译。