当基础 class 中的 属性 发生变化时,在派生 class 中发出通知

Notify in derived class when a property has changed in the base class

每当基本表单中的特定 属性 更改时,我想在派生表单上执行一些代码。

表单在表单上实现了一些常见的东西(皮肤等)

示例:

abstract class A
{
    private bool _value;

    public abstract void Execute();

    public A()
    {
        _value = false;
    }

    public bool Value
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;

            if (value)
            {
                Execute();
            }
        }
    }
}

class B : A
{
    public B()
    {

    }

    public override void Excute()
    {
        // Do some stuff here
    }
}

我一直在处理抽象方法,但我不知道如何解决它。

如果我将 A 声明为抽象的,我将无法在设计器中打开 B。

其实真正的代码要复杂一些,因为我有一个A基class(一个具有共同功能的形式)和B,C,D是更具体的派生形式:B带有按钮导航,C 用于特殊表单等。所以当我在我的应用程序中创建表单时,我必须从 B 或 C 继承,...

感谢您的帮助

您可以在基 class 中将 属性 声明为虚拟,然后在派生 class 中覆盖它,从派生 [=] 调用 Foo 方法14=] 的 setter。由于多态性,您的派生 属性 将始终被访问,即使您的对象被引用为基础 class 实例。

class A
{
    public virtual bool Value { get; set; }
}

class B : A
{
    public override bool Value
    {
        get
        {
            return base.Value;
        }
        set
        {
            if (base.Value != value)
            {
                base.Value = value;
                Foo();
            }
        }
    }

    private void Foo()
    {
        // code I want to run when base class property changes
    }
}