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