我是 Vala 的新手,到目前为止我认为它很酷,但我在理解继承方面遇到了麻烦。我在这里读到我应该base()用来调用父构造函数。好吧,很酷,似乎可以理解,但它对我不起作用。我一直收到标题上的错误。这是我要显示的片段:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
请帮助我理解为什么 Object(....) 有效但 base(...)
不应该是一样的吗?
这是由于 C 代码的实现。当 Vala 生成一个构造函数时,它会生成两个 C 函数,一个_new是分配内存并调用的函数,_construct一个_construct是初始化对象的函数。当您使用 基构造函数时base(),它需要一个匹配的_construct函数来调用。并非所有用 C 编写的类都有这个;在 VAPI 文件中,您会找到has_construct_function = false一些构造函数。如果是这种情况,则无法进行连锁。基类GObject可以从参数设置属性,因此这成为在基类中设置默认值的唯一方法。
| 归档时间: |
|
| 查看次数: |
427 次 |
| 最近记录: |