我是如何从上一个问题中发现的,GObject
样式构造对于 vala 类定义不是必需的。但是许多 gtk 应用程序在扩展基本小部件时使用这种方式。例如,elementary os 应用中心为Gtk.ApplicationWindow
类执行此操作。
所以我的问题是,我可以在不使用Object()
构造的情况下扩展任何基Gtk
类吗?
通常你会像这样调用基构造函数:
public class MainWindow : Gtk.ApplicationWindow {
public MainWindow (Gtk.Application application) {
base (application);
}
}
这不适用于本身使用 GObject 样式构造参数的类。
正如您已经发现的那样,从此类派生的正确方法是:
public class MainWindow : Gtk.ApplicationWindow {
public MainWindow (Gtk.Application application) {
Object (application: application);
}
}
这并没有太大的不同,除了您必须指定每个属性的名称并使用Object
类(在 C 中是 GObject(而不是指定base
。
PS:在我回答你的另一个问题(GObject风格构造如何工作?(我的意思是,当你编写自己的类时,你不需要使用GObject风格的构造,其他人可以从中派生。在这里,Gtk.MainWindow的设计迫使你在派生类中使用GObject风格的构造。