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

A 类中的 click 事件buttonOK有一个处理程序buttonOK_Click,我想在 B 类中使其无效并为buttonOK.

我可以将buttonOK_ClickA 类中的可访问性设置为protected并使用new关键字将其隐藏在 B 类中吗?

4

3 回答 3

4

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

于 2013-06-17T03:21:50.053 回答
3

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

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

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

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

    virtual bool Validate()
    {
        //...
    }
 }
 public class B : A
 {
    override bool Validate()
    {
        //...
    }
 }
于 2013-06-17T03:47:59.433 回答
1

同意 John 的观点,使按钮 Click 事件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");
    }
}
于 2013-06-17T03:35:15.580 回答