public class A : Form
{
buttonOK;
}
public class B : A
{
}
A 类中的 click 事件buttonOK
有一个处理程序buttonOK_Click
,我想在 B 类中使其无效并为buttonOK
.
我可以将buttonOK_Click
A 类中的可访问性设置为protected
并使用new
关键字将其隐藏在 B 类中吗?
public class A : Form
{
buttonOK;
}
public class B : A
{
}
A 类中的 click 事件buttonOK
有一个处理程序buttonOK_Click
,我想在 B 类中使其无效并为buttonOK
.
我可以将buttonOK_Click
A 类中的可访问性设置为protected
并使用new
关键字将其隐藏在 B 类中吗?
派生类不能仅仅“进入”基类并更改实现。您可以做的最好的事情是virtual
在基类中制作事件处理程序,然后您可以在派生类中覆盖它。
使用“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()
{
//...
}
}
同意 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");
}
}