见底部的类图
我有一个 bool 属性:
ClsUcCommon_Abstract::IsPreventFocusFromLeavingControl
定义如下:
public bool IsPreventFocusFromLeavingControl { get; set; }
一个
ClsUcIsMoreThanOneItem
对象和一个ClsUcEliminationSample
对象是通过设计器定义和实例化的。
ClsUcEliminationSample::ButtonInsertClick
看起来像这样:
private void ButtonInsert_Click(object sender, EventArgs e)
{
IsPreventFocusFromLeavingControl = true;
if (this.ValidateChildren())
{
//... do pass stuff
}
else
{
//... do fail stuff
}
}
ClsUcIsMoreThanOneItem::RadioButtonNo_Validating
看起来像这样:
private void RadioButtonNo_Validating(object sender, CancelEventArgs e)
{
Debug.Print(IsPreventFocusFromLeavingControl);
}
在
ClsUcEliminationSample::ButtonInsertClick
中,当this.ValidateChildren()
被调用时,调试器证明ClsUcIsMoreThanOneItem::RadioButtonNo_Validating
被调用,但是在ClsUcIsMoreThanOneItem::RadioButtonNo_Validating
内部,IsPreventFocusFromLeavingControl
应该为真时为假,因为我在ClsUcEliminationSample::ButtonInsertClick
中设置为真
为什么我的设置
ClsUcCommon_Abstract::IsPreventFocusFromLeavingControl
到 true
在 ClsUcEliminationSample::ButtonInsertClick
传播到我的 ClsUcIsMoreThanOneItem
对象?
我通过在
public new bool IsPreventFocusFromLeavingControl { get; set ; }
中定义 ClsUcIsMoreThanOneItem
然后更改 ClsUcEliminationSample::ButtonInsertClick
以在调用 IsPreventFocusFromLeavingControl
之前将 ClsUcIsMoreThanOneItem
加载到 IsPreventFocusFromLeavingControl
对象的 this.ValidateChildren()
属性中来实现它。这看起来很笨拙。
假设我对派生类的工作方式存在根本性的误解,那么正确的方法是什么?