Vala 什么时候需要 `new`

when is `new` required in Vala

我想知道

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

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

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

new 关键字只能与定义构造函数的 class 一起使用。

只有具体的 class 可以定义构造函数。它对于 GObjects 是可选的,因为它们总是可以用 GLib.Object.new.

实例化

在这种特定情况下,GLib.File 被定义为抽象 class 而 File.new_for_path 的行为更像是一个工厂,它将 select 基于协议的实现(即 file://ssh://、...)和 return 其对应的实例。

GLib.DateTime class 不继承自 GLib.Object,因此需要显式构造函数进行实例化。

对于结构,new 可以使用,尽管它会发出警告。