我想报名参加一些事件。以下方式有效:
public void AddOptionAsListner(OptionElement option)
{
option.Selected += onOptionSelectedChanged;
}
public void AddOptionAsListner(OptionElement option)
{
option.Selected += new EventHandler(onOptionSelectedChanged);
}
是否存在差异,或者这只是同一事物的不同语法?
最佳答案
相同 - 没有差异。编译器推断委托(delegate)的类型并自动为您神奇地完成。语法糖让你的生活更轻松
刚刚深入了解了 C#。此功能称为“方法组转换”;在 C#2.0 中添加
例如出自书本
static void MyMethod() { ... }
static void MyMethod( object sender, EventArgs e) {...}
static void Main() {
ThreadStart x = MyMethod; // binds to first overload
EventHandler y = MyMethod; // binds to second overload
}
如果我在反射器中打开它,您会看到编译器刚刚为您创建了正确类型的委托(delegate)实例,当然是在幕后。
L_0000: ldnull
L_0001: ldftn void CS.Temp.Program::MyMethod()
L_0007: newobj instance void [mscorlib]System.Threading.ThreadStart::.ctor(object, native int)
L_000c: pop
L_000d: ldnull
L_000e: ldftn void CS.Temp.Program::MyMethod(object, class [mscorlib]System.EventArgs)
L_0014: newobj instance void [mscorlib]System.EventHandler::.ctor(object, native int)
L_0019: pop
关于c# - 以下注册事件的方式有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260669/