我想知道
之间的区别DateTime t = new DateTime.now_local();
和
File f = File.new_for_path(...);
为什么前者需要new
而前者需要new
发出错误?
答案 0 :(得分:2)
new
关键字只能用于定义构造函数的类。
只有具体的类可以定义构造函数。它是GObjects的可选项,因为它们始终可以使用GLib.Object.new
进行实例化。
在这种特定情况下,GLib.File
被定义为抽象类,File.new_for_path
更像是工厂,它将根据协议选择实现(即file://
,{{ 1}},...)并返回其对应的实例。
ssh://
类不从GLib.DateTime
继承,因此需要实例化显式构造函数。
对于结构体,可以使用GLib.Object
,但它会发出警告。