如何在 vala 中覆盖 属性?

How to override property in vala?

当我继承自GTK widget时,我想覆盖继承的属性,这样不影响正常运行。 但是我找不到任何 material 或描述它的教程。

由于属性是从父级 classes 继承的,您通常不需要为它们做任何事情来继续工作。

我假设您想以某种方式修改 getters / setters。如果不是,请澄清您的问题。

  • 如果可以修改parent class:

只需创建具有(至少)受保护可见性级别的显式虚拟 getter and/or setter 方法。

使用隐式 getters 和 setters valac 将为您创建方法,但它们不是虚拟的。

然后您可以使用普通方法覆盖和基本 class 调用语义来调整父级 属性。

  • 如果不能修改parent class:

您仍然可以做的一件事是为 notify 信号注册一个处理程序,以对被调用的 setter 做出反应。

或者你可能很幸运,父 class 带有一些工具来修改它的行为。