可能是我之前问过这个问题,我用谷歌搜索了一下,但没有得到答案。
委托原型
delegate void method1(string str);
添加回调方法
method1 objDel2;
objDel2 = new method1(TestMethod1);
objDel2("test");
objDel2.Invoke("Invoke");
在上面的代码中,objDel2("test");
和objDel2.Invoke("Invoke");
做的是相同的task.Which,其中一个是好的,或者两个都是相同的。
发布于 2013-08-28 20:29:03
它们是100%相同的-这是纯粹的编译器糖(见下文)。至于哪个更好:两者都不是/都是。
static class Program {
static void Main()
{
method1 objDel2;
objDel2 = new method1(TestMethod1);
objDel2("test");
objDel2.Invoke("Invoke");
}
delegate void method1(string val);
static void TestMethod1(string val) {
System.Console.WriteLine(val);
}
}
有IL
.method private hidebysig static void Main() cil managed
{
.entrypoint
.maxstack 2
.locals init (
[0] class Program/method1 'method')
L_0000: ldnull
L_0001: ldftn void Program::TestMethod1(string)
L_0007: newobj instance void Program/method1::.ctor(object, native int)
L_000c: stloc.0
L_000d: ldloc.0
L_000e: ldstr "test"
L_0013: callvirt instance void Program/method1::Invoke(string) ***HERE***
L_0018: ldloc.0
L_0019: ldstr "Invoke"
L_001e: callvirt instance void Program/method1::Invoke(string) ***HERE***
L_0023: ret
}
注意两者都做同样的事情(请看我标记为***HERE***
的两个位置)
https://stackoverflow.com/questions/18487913
复制相似问题