C# 如何重新实现继承事件处理程序?
类A中的C# 如何重新实现继承事件处理程序?,c#,event-handling,C#,Event Handling,类A中的buttonOK的单击事件有一个处理程序buttonOK\u click,我想在类B中使其无效,并为buttonOK添加一个新的单击事件处理程序 我可以将类A中的按钮的可访问性设置为受保护的,并使用new关键字将其隐藏在类B中吗?派生类不能“进入”基类并更改实现。最好的方法是在基类中使事件处理程序虚拟,然后在派生类中重写它。同意John的观点,使按钮单击事件虚拟应该是最好的选择 下面是一个例子 public class A : Form { buttonOK; } public cl
buttonOK
的单击事件有一个处理程序buttonOK\u click
,我想在类B中使其无效,并为buttonOK
添加一个新的单击事件处理程序
我可以将类A中的
按钮的可访问性设置为受保护的,并使用new
关键字将其隐藏在类B中吗?派生类不能“进入”基类并更改实现。最好的方法是在基类中使事件处理程序虚拟,然后在派生类中重写它。同意John的观点,使按钮单击事件虚拟应该是最好的选择
下面是一个例子
public class A : Form
{
buttonOK;
}
public class B : A
{
}
使用“New”关键字将中断按钮点击事件的注册,因此您在B类中的按钮点击将不会执行。
两种常见做法是:
1将基类中的buttonOK_客户端声明为虚拟,并在派生类中重写它
2在基类中引入Validate虚函数,并在基类和派生类中提供不同的实现:
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");
}
}
public class A : Form
{
void buttonOK(...)
{
if (Validate())
{
//...
}
}
virtual bool Validate()
{
//...
}
}
public class B : A
{
override bool Validate()
{
//...
}
}