мне было интересно, разница между, когда `new` требуется Валы
DateTime t = new DateTime.now_local();
и
File f = File.new_for_path(...);
Почему бывший требует new
в то время как последний излучает ошибку с new
?
мне было интересно, разница между, когда `new` требуется Валы
DateTime t = new DateTime.now_local();
и
File f = File.new_for_path(...);
Почему бывший требует new
в то время как последний излучает ошибку с new
?
Ключевое слово new
может использоваться только с классами, которые определяют конструктор.
Только конкретный класс может определять конструкторы. Это необязательно для GObjects, поскольку они всегда могут быть созданы с помощью GLib.Object.new
.
В данном конкретном случае, GLib.File
определяется как абстрактный класс и File.new_for_path
ведут себя скорее как завод, который будет выбирать реализацию на основе протокола (т.е. file://
, ssh://
...) и вернуть соответствующий экземпляр.
Класс GLib.DateTime
не наследует от GLib.Object
и, следовательно, требует создания явного конструктора.
Для структур, может использоваться new
, хотя он будет выдавать предупреждение.