函数引用与动作引用有何不同?
本文关键字:引用 何不同 函数 | 更新日期: 2023-09-27 17:54:41
我昨天遇到了这种情况,一直困扰着我。当我的DoThis方法调用一个Action时,编译器不会抱怨使用对函数的引用,在我看来,这个Action是一个带有'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){}
}
如果你的问题是为什么这样做:
DoThis(this.thing1);
那么这就是隐含的:
DoThis(new Action<string,string>(this.thing1));
(委托类型是从DoThis
的解析方法签名中推断出来的)
简单地说:编译器为我们填充了一些东西——自c# 2以来就存在的语法糖。在c# 1.1中,它不会编译。