Action(arg)和Action.Invoke(arg)之间的区别
static void Main() { Action myAction = SomeMethod; myAction("Hello World"); myAction.Invoke("Hello World"); } static void SomeMethod(string someString) { Console.WriteLine(someString); }
上面的输出是:
Hello World Hello World
现在我的问题是
-
如果有的话,调用Action的两种方法有什么区别?
-
这个比那个好吗?
-
何时使用哪个?
谢谢
所有委托类型都有编译器生成的Invoke
方法。
C#允许您将委托本身作为调用此方法的快捷方式。
他们都编译到同一个IL:
C#:
Action x = Console.WriteLine; x("1"); x.Invoke("2");
IL:
IL_0000: ldnull IL_0001: ldftn System.Console.WriteLine IL_0007: newobj System.Action..ctor IL_000C: stloc.0 IL_000D: ldloc.0 IL_000E: ldstr "1" IL_0013: callvirt System.Action.Invoke IL_0018: ldloc.0 IL_0019: ldstr "2" IL_001E: callvirt System.Action.Invoke
( ldnull
用于打开委托中的target
参数)