当基础 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
}
}
每当基本表单中的特定 属性 更改时,我想在派生表单上执行一些代码。
表单在表单上实现了一些常见的东西(皮肤等)
示例:
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
}
}