class Child
{
private override void Check_CheckedChanged(object sender, EventArgs e)
{
if (Check.Checked)
{
this.addName(this.FirstName);
this.disableControls();
}
else
{
this.addAddress(this.address);
//this.activatecontrols();// gives error since it's private method in parent.
}
}
}
class Parent
{
private void Check_CheckedChanged(object sender, EventArgs e)
{
if (Check.Checked)
{
this.disablecontrols();
}
else
{
this.addAddress(this.address);
this.activatecontrols();
}
}
}
如果满足 if 条件,我想触发子事件。但如果不能,我需要调用 base 的 else 条件,因为我的 activatecontrols() 在 Parent 中是私有(private)的。那么,我该如何调用事件呢?
最佳答案
如果在派生类中需要ActivateControls
的功能,可以在基类中将其设为protected
。
或者,您可以让 Check_CheckedChanged
事件处理程序调用基类中的 virtual
方法,该方法可以在派生类中被覆盖:
// Parent.cs
private void Check_CheckedChanged(object sender, EventArgs e)
{
OnCheckedChanged();
}
protected virtual void OnCheckedChanged()
{
if (Check.Checked)
{
this.disablecontrols();
}
else
{
this.addAddress(this.address);
this.activatecontrols();
}
}
Parent
的逻辑不需要在Child
中重复,这样可以简化handler:
// Child.cs
protected override void OnCheckedChanged()
{
if (Check.Checked)
{
this.addName(this.FirstName);
}
base.OnCheckedChanged(); // Same outcome
}
关于c# - 在 C# 中有选择地触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351473/