Перфолента.NET. ООП. Атрибуты элементов программы — различия между версиями
Дизайнер (обсуждение | вклад) м |
Админ (обсуждение | вклад) м |
||
Строка 4: | Строка 4: | ||
Значение присвоенное атрибуту '''ИмяАтрибута''' процедуры '''ИмяПроцедуры''' сможет прочитать любая программа, которая обратится к программе содержащей процедуру '''ИмяПроцедуры''' т.е. внешняя программа прочитав значение атрибута ИмяАтрибута у процедуры ИмяПроцедуры получит значение "ЗачениеАтрибута" которое сможет использовать по своему усмотрению. | Значение присвоенное атрибуту '''ИмяАтрибута''' процедуры '''ИмяПроцедуры''' сможет прочитать любая программа, которая обратится к программе содержащей процедуру '''ИмяПроцедуры''' т.е. внешняя программа прочитав значение атрибута ИмяАтрибута у процедуры ИмяПроцедуры получит значение "ЗачениеАтрибута" которое сможет использовать по своему усмотрению. | ||
+ | |||
+ | [[Перфолента.NET. ООП. Как написать свой атрибут|Как написать свой атрибут]] | ||
В языке Перфолента, как и в других .Net языках, атрибуты элементов программы используются: | В языке Перфолента, как и в других .Net языках, атрибуты элементов программы используются: |
Версия 19:19, 12 ноября 2020
В языке Перфолента.Net можно привязать к элементам программы (модулям, полям, функциям) дополнительную информацию, которая придаст им дополнительный смысл, особое назначение или особые правила использования. У атрибута нет логики, он просто хранит несколько значений, что бы их можно было прочитать в будущем. Практический смысл создавать атрибуты есть тогда, когда есть необходимость из другой программы анализировать элементы текущей.
Фактически Атрибут - это метка которую можно прикрепить к полю, функции, методу, самой программе (сборке) или модулю программы (DLL) значение которой сможет прочитать другой компонент этой или другой программы:
Значение присвоенное атрибуту ИмяАтрибута процедуры ИмяПроцедуры сможет прочитать любая программа, которая обратится к программе содержащей процедуру ИмяПроцедуры т.е. внешняя программа прочитав значение атрибута ИмяАтрибута у процедуры ИмяПроцедуры получит значение "ЗачениеАтрибута" которое сможет использовать по своему усмотрению. Как написать свой атрибут
В языке Перфолента, как и в других .Net языках, атрибуты элементов программы используются:
- на стадии компиляции
- на стадии выполнения
Это значит, что как компилятор может внести изменения в генерируемый машинный код основываясь на атрибутах, так и выполняющаяся программа может менять своё поведение в зависимости от атрибутов выполняемого кода.
Процесс получения атрибутов сборки и других элементов программы называется рефлексией (reflection).
Содержание
Виды атрибутов
Итак, Атрибуты могут влиять на:
- сборку (компиляцию) программы
- выполнение кода программы
Атрибуты могут быть определены:
- в библиотеке Net Framework и могут использоваться компиляторами любых .Net языков
- в стандартной библиотеке Перфоленты и могут использоваться компилятором Перфоленты и программами, использующими эту библиотеку
- Вами в вашей программе и использовать их будете только Вы
Часть используемых вами атрибутов определена прямо в языке Перфолента (в стандартной библиотеке), это:
- видимости (ВидноВсем),
- наследования,
- переопределения методов
- и другие (ТолькоДляЧтения).
Важно: в языке 1С, как и в некоторых других языках программирования, атрибуты называют аннотациями. В разных языках синтаксис записи атрибутов (аннотаций) различен, как и способы их использования, но в большинстве современных языков они в том или ином виде есть.
Применение атрибутов
Для указания области видимости полей
- &ВидноВсем - к переменной, полю, функции, методу - могут обращаться другие объекты
- ОбщийДляКласса - Поле существует в 1-м экземпляре, для всех объектов данного типа (Класса)
Примеры использования:
Класс Лампа // Поля класса &ВидноВсем Поле Состояние тип Строка = "Выключена" // Переменная
&ВидноВсем Функция ИмяФункции ---- КонецФункции
Встроенные атрибуты языка Перфолента
В язык Перфолента встроены следующие атрибуты:
- ВидноВсем, ВидноСборке, ВидноНаследникам, ВидноНаследникамСборки - атрибуты видимости классов и их членов;
- ПространствоИмен("МоёПространство "), ПространствоИмён("МоёПространство") (синонимы) - атрибут класса, определяющий пространство имен, к которому принадлежит класс;
- ОднопоточнаяМодель, МногопоточнаяМодель - атрибуты метода Старт, определяющие модель взаимодействия для COM объектов;
- ОбщийДляКласса - атрибут члена класса (Поля, Метода) делающий его общим для всех созданных экземпляров объектов этого класса;
- Глобальный - атрибут модуля, определяющий доступ всех видимых ко всем видимым членам модуля из всех других методов программы;
- Сериализуемый – атрибут класса, указывающий компилятору необходимость создать код поддержки сериализации данных класса; ссылка в вики на сериализация класса
- ДолженНаследоваться, МожетНаследоваться, НеМожетНаследоваться - атрибуты класса, определяющие возможность или необходимость его наследования;
- ДолженПереопределяться, МожетПереопределяться, НеМожетПереопределяться - атрибуты члена класса (Поле, Метод,), определяющие возможность или необходимость его переопределения;
- Переопределение - атрибут переопределения метода родителя в классе-наследнике;
- Перекрытие - атрибут перекрытия метода родителя в классе-наследнике;
- Перегрузка - атрибут перегрузки методов с одинаковыми именами;
- ТолькоЧтение, ТолькоЗапись - атрибуты ограничения доступа к полям и свойствам;
- Обработчик("МоёСобытие") - атрибут метода класса (процедуры), определяющий, что метод является обработчиком указанного события;
- ИмпортМетода – специальный атрибут метода, указывающий компилятору, что реализация метода находится во внешней библиотеке и имеет указанную сигнатуру;
Назначение и особенности использования встроенных атрибутов подробнее рассматриваются в тех статьях, где описаны сущности языка, к которым применяются конкретные атрибуты