今天是个好日子,
我注意到有两种方法可以调用/创建委托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/