抽象类中的具体属性:为什么在一个派生类中所做的更改在另一个派生类中不可见

问题描述 投票:0回答:0

见底部的类图

我有一个 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()
属性中来实现它。这看起来很笨拙。

假设我对派生类的工作方式存在根本性的误解,那么正确的方法是什么?

c# properties scope abstract derived-class
© www.soinside.com 2019 - 2024. All rights reserved.