当基类中的属性发生更改时,在派生类中通知

时间:2015-08-08 17:28:57

标签: c# class derived-class base-class

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

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

示例:

.

我一直在处理抽象方法,但我无法弄清楚如何解决它。

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

实际上,真正的代码有点复杂,因为我有一个A基类(具有常用函数的表单)和B,C,D,它们是更具体的派生形式:B带按钮navitagion,C表示因此,当我在我的应用程序中创建表单时,我必须继承自B或C,...

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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

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
    }
}