public class A : Form
{
buttonOK;
}
public class B : A
{
}
A类中的buttonOK
点击事件有一个处理程序buttonOK_Click
,我想在B类中使其无效,并为buttonOK
添加一个新的点击事件处理程序。
我可以将A类中buttonOK_Click
的辅助功能设置为protected
,并使用new
关键字将其隐藏在B类中吗?
答案 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");
}
}