我的问题涉及
之间的执行差异void Method1(Action callback)
{
Method2(callback);
}
和
void Method3(Action callback)
{
Method4(() => callback());
}
使用第一种方法时,是否会在此时调用回调Action。或者,执行明智,两种方法之间没有区别吗?
这两种方法之间是否存在真正的差异?
答案 0 :(得分:2)
答案 1 :(得分:1)
这两种方法之间是否存在真正的差异?
后者在callstack上放了一个额外的(匿名)方法,但除此之外几乎没有任何区别
主要区别在于第二种方法允许您在Method3
和Method4
不共享Action
void Method3(Action<string,string> callback)
{
Method4(() => callback(arg1,arg2));
}
答案 2 :(得分:0)
我会说一个大的。在第一个中,您只是将一个委托传递给另一个函数,在第二个函数中,您正在创建一个带有闭包变量的新委托,该变量保存第一个委托,该委托将在第一个委托后执行。信不信由你在原始类中创建了一个名为<>c_DisplayClass1
的子类(有关更多信息,请查看this)。查看此处发生的事情的一种简单方法是在调试模式下查看类似
Action a = () => Console.WriteLine("A");
Expression<Action> exp = () => a();
由于Action
只是一个代表无效的Action()&#39;委托是一种继承自Delegate的类型,它的工作原理相同。