Классы

Классы

 className класса : SuperClassName , InterfaceName {
}

Определяет класс (ссылочный тип). В отличии от структур, экземпляры классов выделяются в куче. Более полно классы обсуждаются в секции "Объектно-ориентированное программирование".

Интерфейсы

interface  InterfaceName : SuperInterfaceName {
}

Определяет интерфейс - неинстанциируемый тип. Чтобы создать экземпляр интерфейса, необходимо сначала реализовать его абстрактные методы в неабстрактном классе. Интерфейсы в Vala имеют больше возможностей, чем интерфейсы в Java или C#. Фактически они могут быть использованы как примесиarrow-up-right. Детали будут описаны в секции "Объектно-ориентированное программирование".

------------

wiki: Преимуществом примесей является то, что повышая повторную используемость текстов программarrow-up-right, этот метод избегает многих проблем множественного наследованияarrow-up-right. Однако при этом метод накладывает свои ограничения.

Вообщем примеси это так сказать ООП как оно задумывалось изначально, а не как его реализовали создатели С++.

примеси поддерживают следующие языки:

Статьяarrow-up-right в которой подробно рассматриваются преимущества интерфейсов Vala.

Атрибуты

Атрибуты указывают компилятору Vala детали о том, как именно должен работать код на целевой платформе. Их синтаксис прост: [AttributeName] или [AttributeName(param1 = value1, param2 = value2, ...)].

Они в основном используются для привязок в vapi файлах, [CCode(...)] наиболее используемый атрибут в них. Другой пример - атрибут [DBus(...)], используемый для экспортирования удалённых интерфейсов через D-Bus.

Примечание

Существует возможность создать компактный класс - он не наследуется от Object и следовательно имеет ограниченные возможности, инициализация членов таких классов будет выполнятся быстрее.

"Только классы GObject имеют свойства gobject (интроспектируемыеarrow-up-right во время выполнения). Эта особенность не выделена на изображении выше."

Last updated

Was this helpful?