2013-02-25 1 views
1

Пусть говорят, у меня есть класс продукта:Метод перезаписи или событие подключения в подклассе?

public class Product 
{ 
    public event ProductColorChangedEventHandler ColorChanged; 
    protected virtual void OnColorChanged() 
    { 
     if (null != ColorChanged) 
      ColorChanged(); 
    } 
} 

Если я принадлежащий из этого класса, и мне нужно, чтобы поймать уведомление, когда происходит изменение цвета, это лучше, чтобы переопределить OnColorChanged или повесьте событие в моем конструктор подкласса?

+0

Ни один из выше. Подкласс должен вызывать 'base.OnColorChanged()' и предоставлять свою собственную реализацию поверх базового вызова. Я не вижу причин для установки события для этой цели. На ум приходит узор декоратора. –

+0

Извините, что я неправильно сформулировал это (я обновил OP). Он должен сказать «поймать уведомление», а не «получить». Другими словами, мне нужно что-то сделать в моем подклассе, когда происходит событие изменения цвета. – BlueChameleon

+0

@BlueChameleon Тогда вы имеете в виду «подписаться» на событие или «добавить обработчик событий», а не «поймать» или «получить». – Servy

ответ

3

Я думаю, что предпочтительный способ подписаться на событие в подклассе так:

public class SubProduct : Product 
{ 
    public SubProduct() 
    { 
     ColorChanged += new ProductColorChangedEventHandler(color_changed); 
    } 

    private color_changed(object sender, EventArgs e) 
    { 
     //do stuff 
    } 
} 
0

Вы можете переопределить метод

public override OnColorChanged() 
{ 
    //do stuff 
} 
+1

Да, он * может *. Он спрашивает, должен ли он *, или если он должен подписаться на мероприятие. Обратите внимание, что с помощью вашего метода, поскольку вы не вызываете базовую реализацию, вы теперь не вызываете всех обработчиков событий, которые подписались на фактическое событие, поэтому мне не нравится переопределять метод, подобный этому. – Servy

0

Hooking не правильный способ сделать это когда вы все еще разрабатываете свое приложение.

Подпишитесь на событие в подкласс, это решение проблемы.

Вот хорошо читать: Hooking on Wiki

Смежные вопросы