如果比较两种情况下生成的IL,你会发现它们是相同的。下面是在C#中这两种情况下,和IL它们导致
实例C#:
namespace EventTest
{
public class Publisher
{
public delegate void SomeEvent(object sender);
public event SomeEvent OnSomeEvent;
public event SomeEvent OnOtherEvent;
}
public class Subscriber
{
public Subscriber(Publisher p)
{
p.OnSomeEvent += new Publisher.SomeEvent(Respond);
p.OnOtherEvent += Respond;
}
public void Respond(object sender)
{
}
}
}
这里的IL的构造函数。注意行IL_000a
到IL_0028
。
.method public hidebysig specialname rtspecialname
instance void .ctor(class EventTest.Publisher p) cil managed
{
// Code size 48 (0x30)
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: nop
IL_0007: nop
IL_0008: ldarg.1
IL_0009: ldarg.0
IL_000a: ldftn instance void EventTest.Subscriber::Respond(object)
IL_0010: newobj instance void EventTest.Publisher/SomeEvent::.ctor(object,
native int)
IL_0015: callvirt instance void EventTest.Publisher::add_OnSomeEvent(class EventTest.Publisher/SomeEvent)
IL_001a: nop
IL_001b: ldarg.1
IL_001c: ldarg.0
IL_001d: ldftn instance void EventTest.Subscriber::Respond(object)
IL_0023: newobj instance void EventTest.Publisher/SomeEvent::.ctor(object,
native int)
IL_0028: callvirt instance void EventTest.Publisher::add_OnOtherEvent(class EventTest.Publisher/SomeEvent)
IL_002d: nop
IL_002e: nop
IL_002f: ret
}
结论:我没有看到任何更改代码的理由,它们是等价的。