Когда нужно делать следующее?Когда вы должны переопределять OnEvent, а не подписываться на событие при наследовании
class Foo : Control
{
protected override void OnClick(EventArgs e)
{
// new code here
}
}
В отличие от этого?
class Foo : Control
{
public Foo()
{
this.Click += new EventHandler(Clicked);
}
private void Clicked(object sender, EventArgs e)
{
// code
}
}
Я согласен, переопределить FTW – mmcdole 2008-10-01 19:39:15
Интересно, что принципы дизайна утверждают, что при создании виртуального OnFoo (), соответствующее событие Foo должно быть запущено, даже если нисходящий класс не вызывает base.OnFoo()! Хотя это было бы довольно неудобно. – 2008-10-01 23:04:04
@Matt: private void RaiseFoo() { /* Call OnFoo для производных классов */ this.OnFoo(); /* Raise foo event (работает, даже если base.OnFoo никогда не вызывает производные классы) */ ... } } protected virtual void OnFoo() {/ * ничего не делает * /} – 2008-10-12 23:03:18