Перфолента.NET. ООП. Атрибуты элементов программы — различия между версиями
Дизайнер (обсуждение | вклад) м |
Админ (обсуждение | вклад) м (→Применение атрибутов) |
||
(не показано 17 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | В языке [[Перфолента.Net]] можно привязать к элементам программы дополнительную информацию, которая придаст им дополнительный смысл, особое назначение или особые правила использования. | + | В языке [[Перфолента.Net]] можно привязать к элементам программы (модулям, полям, функциям) дополнительную информацию, которая придаст им дополнительный смысл, особое назначение или особые правила использования. У атрибута нет логики, он просто хранит несколько значений, что бы их можно было прочитать в будущем. Практический смысл создавать атрибуты есть тогда, когда есть необходимость из другой программы анализировать элементы текущей. |
− | В языке Перфолента, как и в других .Net языках, атрибуты элементов программы используются | + | Фактически '''Атрибут - это метка''' которую можно прикрепить к полю, функции, методу, самой программе (сборке) или модулю программы (DLL) значение которой сможет прочитать другой компонент этой или другой программы: |
+ | |||
+ | Значение присвоенное атрибуту '''ИмяАтрибута''' процедуры '''ИмяПроцедуры''' сможет прочитать любая программа, которая обратится к программе содержащей процедуру '''ИмяПроцедуры''' т.е. внешняя программа прочитав значение атрибута ИмяАтрибута у процедуры ИмяПроцедуры получит значение "ЗачениеАтрибута" которое сможет использовать по своему усмотрению. | ||
+ | |||
+ | • [[Перфолента.NET. ООП. Как написать свой атрибут|Как написать свой атрибут]] | ||
+ | |||
+ | В языке Перфолента, как и в других .Net языках, атрибуты элементов программы используются: | ||
* на стадии компиляции | * на стадии компиляции | ||
* на стадии выполнения | * на стадии выполнения | ||
Это значит, что как компилятор может внести изменения в генерируемый машинный код основываясь на атрибутах, так и выполняющаяся программа может менять своё поведение в зависимости от атрибутов выполняемого кода. | Это значит, что как компилятор может внести изменения в генерируемый машинный код основываясь на атрибутах, так и выполняющаяся программа может менять своё поведение в зависимости от атрибутов выполняемого кода. | ||
− | Процесс получения атрибутов сборки и других элементов программы называется рефлексией (reflection). | + | Процесс '''получения''' атрибутов сборки и других элементов программы называется рефлексией (reflection). |
== Виды атрибутов == | == Виды атрибутов == | ||
Строка 13: | Строка 19: | ||
* выполнение кода программы | * выполнение кода программы | ||
− | Атрибуты | + | Атрибуты определены: |
* в библиотеке Net Framework и могут использоваться компиляторами любых .Net языков | * в библиотеке Net Framework и могут использоваться компиляторами любых .Net языков | ||
* в стандартной библиотеке Перфоленты и могут использоваться компилятором Перфоленты и программами, использующими эту библиотеку | * в стандартной библиотеке Перфоленты и могут использоваться компилятором Перфоленты и программами, использующими эту библиотеку | ||
Строка 27: | Строка 33: | ||
== Применение атрибутов == | == Применение атрибутов == | ||
+ | Наиболее популярные и простые в использовании атрибуты: | ||
− | + | * [[&ВидноВсем]] - атрибуты видимости классов и их членов, к полю, функции, методу, объекту - могут обращаться другие объекты | |
+ | * [[&ОбщийДляКласса]] - [[Поле]] существует в 1-м экземпляре, для всех объектов данного типа (Класса) | ||
+ | * [[&ТолькоЧтение]], [[&ТолькоЗапись]] - атрибуты ограничения доступа к полям и свойствам объекта | ||
+ | * [[&ИмпортМетода]] – специальный атрибут метода, указывающий компилятору, что реализация метода находится во внешней библиотеке и имеет указанную сигнатуру | ||
− | + | Примеры использования: | |
+ | Класс Лампа | ||
+ | // Поля класса | ||
+ | &ВидноВсем | ||
+ | Поле Состояние тип Строка = "Выключена" // Переменная имеющая атрибут &ВидноВсем | ||
− | + | &ВидноВсем | |
− | + | Функция ИмяФункции // Функция имеющая атрибут &ВидноВсем | |
− | + | ---- | |
− | + | КонецФункции | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Встроенные атрибуты языка Перфолента == | == Встроенные атрибуты языка Перфолента == | ||
Строка 98: | Строка 55: | ||
В язык Перфолента встроены следующие атрибуты: | В язык Перфолента встроены следующие атрибуты: | ||
− | * '''ВидноВсем''', '''ВидноСборке''', '''ВидноНаследникам''', '''ВидноНаследникамСборки''' - атрибуты видимости классов и их членов | + | * '''ВидноВсем''', '''ВидноСборке''', '''ВидноНаследникам''', '''ВидноНаследникамСборки''' - атрибуты видимости классов и их членов |
− | * '''ПространствоИмен'''("МоёПространство "), ПространствоИмён("МоёПространство") (синонимы) - атрибут класса, определяющий пространство имен, к которому принадлежит класс | + | * '''ПространствоИмен'''("МоёПространство "), ПространствоИмён("МоёПространство") (синонимы) - атрибут класса, определяющий пространство имен, к которому принадлежит класс |
− | * '''ОднопоточнаяМодель''', '''МногопоточнаяМодель''' - атрибуты метода Старт, определяющие модель взаимодействия для COM объектов | + | * '''ОднопоточнаяМодель''', '''МногопоточнаяМодель''' - атрибуты метода Старт, определяющие модель взаимодействия для COM объектов |
− | * '''ОбщийДляКласса''' - атрибут члена класса (Поля, Метода) делающий его общим для всех созданных экземпляров объектов этого класса | + | * '''ОбщийДляКласса''' - атрибут члена класса (Поля, Метода) делающий его общим для всех созданных экземпляров объектов этого класса |
− | * '''Глобальный''' - атрибут модуля, определяющий доступ всех видимых ко всем видимым членам модуля из всех других методов программы | + | * '''Глобальный''' - атрибут модуля, определяющий доступ всех видимых ко всем видимым членам модуля из всех других методов программы |
* '''Сериализуемый''' – атрибут класса, указывающий компилятору необходимость создать код поддержки сериализации данных класса; ссылка в вики на сериализация класса | * '''Сериализуемый''' – атрибут класса, указывающий компилятору необходимость создать код поддержки сериализации данных класса; ссылка в вики на сериализация класса | ||
− | * '''ДолженНаследоваться''', '''МожетНаследоваться''', '''НеМожетНаследоваться''' - атрибуты класса, определяющие возможность или необходимость его наследования | + | * '''ДолженНаследоваться''', '''МожетНаследоваться''', '''НеМожетНаследоваться''' - атрибуты класса, определяющие возможность или необходимость его наследования |
− | * '''ДолженПереопределяться''', '''МожетПереопределяться''', '''НеМожетПереопределяться''' - атрибуты члена класса (Поле, Метод,), определяющие возможность или необходимость его переопределения | + | * '''ДолженПереопределяться''', '''МожетПереопределяться''', '''НеМожетПереопределяться''' - атрибуты члена класса (Поле, Метод,), определяющие возможность или необходимость его переопределения |
− | * '''Переопределение''' - атрибут переопределения метода родителя в классе-наследнике | + | * '''Переопределение''' - атрибут переопределения метода родителя в классе-наследнике |
− | * '''Перекрытие''' - атрибут перекрытия метода родителя в классе-наследнике | + | * '''Перекрытие''' - атрибут перекрытия метода родителя в классе-наследнике |
− | * '''Перегрузка''' - атрибут перегрузки методов с одинаковыми именами | + | * '''Перегрузка''' - атрибут перегрузки методов с одинаковыми именами |
− | * '''ТолькоЧтение''', '''ТолькоЗапись''' - атрибуты ограничения доступа к полям и свойствам | + | * '''ТолькоЧтение''', '''ТолькоЗапись''' - атрибуты ограничения доступа к полям и свойствам |
− | * '''Обработчик'''("МоёСобытие") - атрибут метода класса (процедуры), определяющий, что метод является обработчиком указанного события | + | * '''Обработчик'''("МоёСобытие") - атрибут метода класса (процедуры), определяющий, что метод является обработчиком указанного события |
− | * '''ИмпортМетода''' – специальный атрибут метода, указывающий компилятору, что реализация метода находится во внешней библиотеке и имеет указанную сигнатуру | + | * '''ИмпортМетода''' – специальный атрибут метода, указывающий компилятору, что реализация метода находится во внешней библиотеке и имеет указанную сигнатуру |
Назначение и особенности использования встроенных атрибутов подробнее рассматриваются в тех статьях, где описаны сущности языка, к которым | Назначение и особенности использования встроенных атрибутов подробнее рассматриваются в тех статьях, где описаны сущности языка, к которым | ||
применяются конкретные атрибуты | применяются конкретные атрибуты | ||
− | == | + | == См. также == |
− | + | * [[Перфолента.NET. ООП. Атрибуты Net Farmework]] | |
− | + | * [[Перфолента.NET. ООП. Как написать свой атрибут]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | == Ссылки == | ||
+ | * http://promcod.com.ua/Article.asp?code=20201106234710055491 Первоисточник | ||
[[Категория:Перфолента.NET. Описание языка Перфолента.NET]] | [[Категория:Перфолента.NET. Описание языка Перфолента.NET]] | ||
[[Категория:Перфолента.NET. Объектно-Ориентированное Программирование]] | [[Категория:Перфолента.NET. Объектно-Ориентированное Программирование]] |
Текущая версия на 19:38, 12 ноября 2020
В языке Перфолента.Net можно привязать к элементам программы (модулям, полям, функциям) дополнительную информацию, которая придаст им дополнительный смысл, особое назначение или особые правила использования. У атрибута нет логики, он просто хранит несколько значений, что бы их можно было прочитать в будущем. Практический смысл создавать атрибуты есть тогда, когда есть необходимость из другой программы анализировать элементы текущей.
Фактически Атрибут - это метка которую можно прикрепить к полю, функции, методу, самой программе (сборке) или модулю программы (DLL) значение которой сможет прочитать другой компонент этой или другой программы:
Значение присвоенное атрибуту ИмяАтрибута процедуры ИмяПроцедуры сможет прочитать любая программа, которая обратится к программе содержащей процедуру ИмяПроцедуры т.е. внешняя программа прочитав значение атрибута ИмяАтрибута у процедуры ИмяПроцедуры получит значение "ЗачениеАтрибута" которое сможет использовать по своему усмотрению.
В языке Перфолента, как и в других .Net языках, атрибуты элементов программы используются:
- на стадии компиляции
- на стадии выполнения
Это значит, что как компилятор может внести изменения в генерируемый машинный код основываясь на атрибутах, так и выполняющаяся программа может менять своё поведение в зависимости от атрибутов выполняемого кода.
Процесс получения атрибутов сборки и других элементов программы называется рефлексией (reflection).
Содержание
Виды атрибутов
Итак, Атрибуты могут влиять на:
- сборку (компиляцию) программы
- выполнение кода программы
Атрибуты определены:
- в библиотеке Net Framework и могут использоваться компиляторами любых .Net языков
- в стандартной библиотеке Перфоленты и могут использоваться компилятором Перфоленты и программами, использующими эту библиотеку
- Вами в вашей программе и использовать их будете только Вы
Часть используемых вами атрибутов определена прямо в языке Перфолента (в стандартной библиотеке), это:
- видимости (ВидноВсем),
- наследования,
- переопределения методов
- и другие (ТолькоДляЧтения).
Важно: в языке 1С, как и в некоторых других языках программирования, атрибуты называют аннотациями. В разных языках синтаксис записи атрибутов (аннотаций) различен, как и способы их использования, но в большинстве современных языков они в том или ином виде есть.
Применение атрибутов
Наиболее популярные и простые в использовании атрибуты:
- &ВидноВсем - атрибуты видимости классов и их членов, к полю, функции, методу, объекту - могут обращаться другие объекты
- &ОбщийДляКласса - Поле существует в 1-м экземпляре, для всех объектов данного типа (Класса)
- &ТолькоЧтение, &ТолькоЗапись - атрибуты ограничения доступа к полям и свойствам объекта
- &ИмпортМетода – специальный атрибут метода, указывающий компилятору, что реализация метода находится во внешней библиотеке и имеет указанную сигнатуру
Примеры использования:
Класс Лампа // Поля класса &ВидноВсем Поле Состояние тип Строка = "Выключена" // Переменная имеющая атрибут &ВидноВсем
&ВидноВсем Функция ИмяФункции // Функция имеющая атрибут &ВидноВсем ---- КонецФункции
Встроенные атрибуты языка Перфолента
В язык Перфолента встроены следующие атрибуты:
- ВидноВсем, ВидноСборке, ВидноНаследникам, ВидноНаследникамСборки - атрибуты видимости классов и их членов
- ПространствоИмен("МоёПространство "), ПространствоИмён("МоёПространство") (синонимы) - атрибут класса, определяющий пространство имен, к которому принадлежит класс
- ОднопоточнаяМодель, МногопоточнаяМодель - атрибуты метода Старт, определяющие модель взаимодействия для COM объектов
- ОбщийДляКласса - атрибут члена класса (Поля, Метода) делающий его общим для всех созданных экземпляров объектов этого класса
- Глобальный - атрибут модуля, определяющий доступ всех видимых ко всем видимым членам модуля из всех других методов программы
- Сериализуемый – атрибут класса, указывающий компилятору необходимость создать код поддержки сериализации данных класса; ссылка в вики на сериализация класса
- ДолженНаследоваться, МожетНаследоваться, НеМожетНаследоваться - атрибуты класса, определяющие возможность или необходимость его наследования
- ДолженПереопределяться, МожетПереопределяться, НеМожетПереопределяться - атрибуты члена класса (Поле, Метод,), определяющие возможность или необходимость его переопределения
- Переопределение - атрибут переопределения метода родителя в классе-наследнике
- Перекрытие - атрибут перекрытия метода родителя в классе-наследнике
- Перегрузка - атрибут перегрузки методов с одинаковыми именами
- ТолькоЧтение, ТолькоЗапись - атрибуты ограничения доступа к полям и свойствам
- Обработчик("МоёСобытие") - атрибут метода класса (процедуры), определяющий, что метод является обработчиком указанного события
- ИмпортМетода – специальный атрибут метода, указывающий компилятору, что реализация метода находится во внешней библиотеке и имеет указанную сигнатуру
Назначение и особенности использования встроенных атрибутов подробнее рассматриваются в тех статьях, где описаны сущности языка, к которым применяются конкретные атрибуты