什么时候在Vala需要`new`

时间:2017-02-12 19:52:09

标签: vala

我想知道

之间的区别
DateTime t = new DateTime.now_local();

File f = File.new_for_path(...);

为什么前者需要new而前者需要new发出错误?

1 个答案:

答案 0 :(得分:2)

new关键字只能用于定义构造函数的类。

只有具体的类可以定义构造函数。它是GObjects的可选项,因为它们始终可以使用GLib.Object.new进行实例化。

在这种特定情况下,GLib.File被定义为抽象类,File.new_for_path更像是工厂,它将根据协议选择实现(即file://,{{ 1}},...)并返回其对应的实例。

ssh://类不从GLib.DateTime继承,因此需要实例化显式构造函数。

对于结构体,可以使用GLib.Object,但它会发出警告。