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();
}
}
}
如果满足条件,我想触发子事件。但是如果我不能调用base的else条件,因为我的activatecontrols()在Parent中是私有的。那么,我该怎么称呼这个事件呢?
答案 0 :(得分:3)
如果您在派生类中需要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
中重复,因此可以简化处理程序:
// Child.cs
protected override void OnCheckedChanged()
{
if (Check.Checked)
{
this.addName(this.FirstName);
}
base.OnCheckedChanged(); // Same outcome
}
答案 1 :(得分:2)
一个非常简单的解决方案是在Parent上使ActivateControls受保护虚拟并在子节点上覆盖它,然后如果不是Check.Checked,你可以在子方法中调用base.activatecontrols。