Да; сравниваются делегаты на экземпляре и MethodInfo
; если они одинаковы, то это будет работать. Проблема возникает при попытке отписаться от анонимного метода; в этом случае вы должны сохранить ссылку на делегата, чтобы отписаться.
Итак:
Это нормально:
control.SomeEvent += obj.SomeMethod;
//...
control.SomeEvent -= obj.SomeMethod;
Но это намного опаснее:
control.SomeEvent += delegate {Trace.WriteLine("Foo");};
//...
control.SomeEvent -= delegate {Trace.WriteLine("Foo");};
Правильный процесс с анонимными методами:
EventHandler handler = delegate {Trace.WriteLine("Foo");};
control.SomeEvent += handler;
//...
control.SomeEvent -= handler;