今天是个好日子,

我注意到有两种方法可以调用/创建委托

MrDel MyDelegate = new MrDel(Mathmetics.Method);

要么

MrDel MyDelegate = Mathmetics.Method;

所以我的问题是这两种方式之间有什么区别?如果第二个的键入要短得多,而且它们似乎在做同样的事情,为什么还要使用第一个?通过阅读一些教程,我发现ppl使用第一种方法或第二种方法,但它们并没有真正解释为什么。您能帮我弄清楚吗,或指出我可以在哪里读到它,谢谢。

完整代码:

class Program
{
    public delegate void MrDel(int arg, ThingsToDo e);

    static void Main(string[] args)
    {
        MrDel MyDelegate = new MrDel(Mathmetics.Method);
        //MrDel MyDelegate = Mathmetics.Method;


        Method(MyDelegate);

        Console.Read();
    }

最佳答案

它们是相同的-第二个是Syntactic Sugar。为了确认我查看了为两者生成的IL,它们是相同的:

IL_0001:  ldarg.0
IL_0002:  ldftn       UserQuery.Method
IL_0008:  newobj      UserQuery+MrDel..ctor
IL_000D:  stloc.0     // MyDelegate

Method:
IL_0000:  nop
IL_0001:  ret

MrDel.Invoke:

MrDel.BeginInvoke:

MrDel.EndInvoke:

MrDel..ctor:

关于c# - 调用/创建委托(delegate),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18648263/

10-12 00:05