2013-06-17 3 views
0
public class A : Form 
{ 
    buttonOK; 
} 
public class B : A 
{ 
} 

щелчок событие buttonOK в классе А есть обработчик buttonOK_Click, я хочу, чтобы аннулировать его в классе B и добавить новый обработчик события щелчка для buttonOK.Как переопределить наследующий обработчик событий?

Могу ли я установить доступность buttonOK_Click в классе А как protected и использовать ключевое слово new, чтобы скрыть его в классе B?

ответ

4

Производный класс не может просто «достичь» базового класса и изменить реализацию. Лучшее, что вы можете сделать, это сделать обработчик события virtual в базовом классе, тогда вы можете переопределить его в производном классе.

1

Согласны с Джоном, делая кнопку Нажмите событие virtual должно быть лучшим вариантом.

Вот пример ..

public partial class Base : Form 
{ 
    public Base() 
    { 
     InitializeComponent(); 
    } 

    protected virtual void button1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("From Base"); 
    } 
} 

public class Derived: Base 
{ 
    protected override void button1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("From Derived"); 
    } 
} 
3

Использование «Новое» ключевое слово сломается регистрация события нажатия кнопки, таким образом, ваш buttonOK_click в классе B не будет выполнен. Два распространенных метода:

1 Объявите buttonOK_client в базовом классе как виртуальный и переопределите его в производном классе.

-Представьте виртуальную функцию Validate в базовом классе и обеспечивают различные реализации в базе и производный класс:

public class A : Form 
{ 
    void buttonOK(...) 
    { 
     if (Validate()) 
     { 
      //... 
     } 
    } 

    virtual bool Validate() 
    { 
     //... 
    } 
} 
public class B : A 
{ 
    override bool Validate() 
    { 
     //... 
    } 
} 
Смежные вопросы