不支持链达 'Gtk.Box.new'

Chain up to 'Gtk.Box.new' not supported

我是 Vala 的新手,到目前为止我认为它很酷,但我在理解继承方面遇到了困难。我读到 here 我应该使用 base() 来调用 parents 构造函数。好吧,很酷,似乎可以理解,但它对我不起作用。我一直在标题上收到错误。这是我要展示的片段:

public class MyBox : Gtk.Box {
    public MyBox(Gtk.Orientation orientation, int spacing) {
        // I have to this
        this.set_orientation(orientation);
        this.set_spacing(spacing);
        // I want to do this:
        base(orientation, spacing);
        //workaround is this:
        Object(orientation: orientation, spacing: spacing);
    }
}

请帮助我理解为什么 Object(....) 有效但 base(...)

不应该是一样的吗?

这是由于 C 代码的实现。当 Vala 生成一个构造函数时,它会生成两个 C 函数,一个分配内存并调用 _construct_new 函数和一个初始化对象的 _construct 函数。当您使用 base() 对基本构造函数进行 case 时,它​​需要一个匹配的 _construct 函数来调用。不是所有用 C 写的 classes 都有这个;在 VAPI 文件中,您会找到一些构造函数的 has_construct_function = false。如果是这种情况,则无法进行连锁。基 GObject 可以通过参数设置属性,因此这成为在基 class.

中设置默认值的唯一方法