是否可以在不使用 GObject 样式构造的情况下扩展基本 Gtk 小部件?

Is it possible to extend base Gtk widget without using GObject style construction?

我是如何从我的 , GObject style construction is not required for vala class defenition. But much gtk apps use this way when extend base widget. For example, elementary os app center 中发现的 Gtk.ApplicationWindow class。

所以我的问题是,我可以在不使用 Object() 构造的情况下扩展任何基础 Gtk class 吗?

通常你会这样调用基础构造函数:

public class MainWindow : Gtk.ApplicationWindow {
    public MainWindow (Gtk.Application application) {
        base (application);
    }
}

这不适用于本身使用 GObject 样式构造参数的 classes。

如您所知,从 class 中得出的正确方法是:

public class MainWindow : Gtk.ApplicationWindow {
    public MainWindow (Gtk.Application application) {
        Object (application: application);
    }
}

这并没有太大的不同,除了你必须指定每个 属性 的名称并使用 Object class (这是 C 中的 GObject)而不是指定 base.

PS:在我对您的其他问题 () 的回答中,我的意思是您在编写自己的 class 时不需要使用 GObject 样式构造es,其他人可以从中派生。这里是相反的,Gtk.MainWindow 的设计迫使您在派生的 class 中也使用 GObject 样式构造。