如何重新实现继承事件处理程序?

时间:2013-06-17 03:17:40

标签: c# event-handling

public class A : Form
{
  buttonOK;
}
public class B : A
{
}

A类中的buttonOK点击事件有一个处理程序buttonOK_Click,我想在B类中使其无效,并为buttonOK添加一个新的点击事件处理程序。

我可以将A类中buttonOK_Click的辅助功能设置为protected,并使用new关键字将其隐藏在B类中吗?

3 个答案:

答案 0 :(得分:4)

派生类不能只是“进入”基类并更改实现。您可以做的最好的事情是在基类中创建事件处理程序virtual,然后您可以在派生类中覆盖它。

答案 1 :(得分:3)

使用“新建”关键字会破坏按钮点击事件的注册,因此不会执行B类中的buttonOK_click。 两种常见的做法是:

1将基类中的buttonOK_client声明为virtual,并在派生类中覆盖它。

2在基类中引入验证虚函数,并在基类和派生类中提供不同的实现:

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

    virtual bool Validate()
    {
        //...
    }
 }
 public class B : A
 {
    override bool Validate()
    {
        //...
    }
 }

答案 2 :(得分:1)

同意John,使按钮点击事件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");
    }
}