Difference between Action(arg) and Action.Invoke(arg)

后端 未结 1 1414
南旧
南旧 2020-12-16 10:24
static void Main()
{
    Action myAction = SomeMethod;

    myAction(\"Hello World\");
    myAction.Invoke(\"Hello World\");
}

static void SomeMethod(         


        
相关标签:
1条回答
  • 2020-12-16 11:06

    All delegate types have a compiler-generated Invoke method.
    C# allows you to call the delegate itself as a shortcut to calling this method.

    They both compile to the same IL:

    C#:

    Action<string> x = Console.WriteLine;
    x("1");
    x.Invoke("2");
    

    IL:

    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
    

    (The ldnull is for the target parameter in an open delegate)

    0 讨论(0)
提交回复
热议问题