using System;
delegate void D(int x);
class C
{
public static void M1(int i) {
Console.WriteLine("C.M1: " + i);
}
}
D cd1 = new D(C.M1);
D cd2 = C.M1;
委托实例cd1
和cd2
的创建方式与上述不同。
他们是等同的吗?
如果没有,他们之间有什么区别?
感谢。
答案 0 :(得分:4)
如果你看看通过像LinqPad这样的工具生成的IL,你会发现在这种情况下两个块都编译成完全相同的东西:
void Main()
{
D cd1 = new D(C.M1);
D cd2 = C.M1;
}
变为
IL_0000: nop
IL_0001: ldnull
IL_0002: ldftn UserQuery+C.M1
IL_0008: newobj UserQuery+D..ctor
IL_000D: stloc.0 // cd1
IL_000E: ldnull
IL_000F: ldftn UserQuery+C.M1
IL_0015: newobj UserQuery+D..ctor
IL_001A: stloc.1 // cd2
IL_001B: ret
请注意,指令2-5在6-9中重复,并且在创建新实例后使用不同的stloc。
答案 1 :(得分:4)