Подкорректирую себя и дополню.
В С коде, что бы добавить своему наследнику GObject кастомные свойства, используется переопределение функий get_property, set_property у класса. К примеру, свойство spacing у бокса при создании.
Вызывая подобным образом базовый конструктор ( GLib.Object ( arg_1: val_1, arg_2: val_2 ) ), происходит последовательная проверка наличия указанных свойств во всех дочерних интерфейсах и классах.
В vala, в отличии от C, указывать свойства классам значительно проще. Достаточно с полем сделать подобное:
using Gtk;
class Example : Gtk.Box {
public bool draggable { get; set; default = false; }
public bool reorderable { get; set; default = false; }
public Example () {
GLib.Object (oorietation: Gtk.Orientation.VERTICAL, spacing: 0, draggable: true, reorderable: false);
}
}
В дальнейшем подобные свойства можно запрашивать у классов, отнаследованных от GLib.Object с помощью метода get_property, и устанавливать соответственно c помощью set_property, используя при этом glib обертку Value.
Хотя, на самом деле, тут можно ещё довольно много написать, как работает get и set самого свойства. Наверное проще будет почитать в учебнике по C#.