Vala был разработан как замена для ручного труда, необходимого для написания кода C на основе GLib.
Так как C не имеет классов на основе GLib, C кодирование объекта выполняется в другом чем, скажем, C# или Java.
Вот фрагмент вывода valac -C car.vala
для вашего примера кода:
Car*
car_construct (GType object_type,
gint speed)
{
Car * self = NULL;
self = (Car*) g_object_new (object_type, "speed", speed, NULL);
return self;
}
Итак, Вала испускает car_construct
функция, которая вызывает метод g_object_new ()
. Это метод GLib, используемый для создания любого класса, основанного на GLib, путем передачи его типа и создания параметров по аргументам имени и значения один за другим, завершается значением NULL.
Когда вы не используете свойства construct
, это невозможно передать параметры через g_object_new ()
, и вам придется вызывать установщик, например:
Car*
car_construct (GType object_type,
gint speed)
{
Car * self = NULL;
self = (Car*) g_object_new (object_type, NULL);
car_set_speed (self, speed);
return self;
}
Здесь car_set_speed ()
вызывается вместо передачи значения через g_object_new ()
.
Какой из них вы предпочитаете, зависит от нескольких факторов. Если вы часто взаимодействуете с кодом C, а код C использует параметры конструкции, вы хотите использовать конструкцию стиля GObject. В противном случае вы, вероятно, в порядке с конструкторами стиля C # / Java.
PS: сеттер также автоматически генерируется vala c и не только устанавливает значение свойства, но и уведомляет всех слушателей через g_object_notify ()
система.