pascalabcnet/PABCNetHelp/LangGuide/Classes/attributes.html
Mikhalkovich Stanislav 7aed6ed062 Print($'{Arr(1,2,3)}')
теперь печатает содержимое массива
2025-11-11 22:04:03 +03:00

57 lines
3.6 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<html>
<head>
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="Attribute">
<param name="Keyword" value="Атрибут">
</object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title></title>
<link rel="StyleSheet" href="../../default.css">
</head>
<body>
<H1>Атрибуты</H1>
<p>В языке имеется ограниченное число стандартных атрибутов, задаваемых
ключевыми словами - например: атрибуты уровня доступа public, private и
protected, атрибуты static, virtual и override для методов. </p>
<p>Пользовательские атрибуты (далее просто атрибуты) - специальные языковые
конструкции, позволяющие помечать классы, методы, подпрограммы, параметры
некоторым именем (возможно с параметрами).</p>
<p>Например, для механизма сериализации класс помечается атрибутом
[Serializable], а поля, которые не следует сериализовывать, атрибутом
[NonSerialized]. При Unit-тестировании тестовый метод помечается атрибутом
[Test] или атрибутом [TestCase]. Распознаются атрибуты методом отражения
(рефлексии).</p>
<p>Атрибут - это обычный класс, унаследованный от System.Atribute. Например: </p>
<blockquote>
<p><code><b>type </b>AuthorAttribute = <strong>class</strong>(System.Attribute)<br>&nbsp;
<strong>auto</strong> property Name: string;<br>&nbsp; <strong>constructor</strong> (n: string);<br>&nbsp;
<strong>begin</strong><br>&nbsp;&nbsp;&nbsp; Name := n;<br>&nbsp; <strong>end</strong>;&nbsp; <strong><br>end</strong>;</code></p>
</blockquote>
<p>Следует обратить внимание, что класс атрибута принято оканчивать на <code>
Attribute</code>.</p>
<p>При пометке сущности атрибутом имя атрибута заключается в квадратные скобки. Конструктор атрибута предоставляет
также возможность использовать атрибуты с
параметрами. Например, можно пометить класс
атрибутом <code>AuthorAttribute</code>. </p>
<blockquote>
<p><code>[Author('Alex')]<b><br>type </b>My = <strong>class</strong><br>&nbsp; // ...<strong><br>
end</strong>;</code></p>
</blockquote>
<p>Следует обратить внимание, что окончание <code>Attribute</code> можно не
указывать.</p>
<p>Распознать, помечен ли данный класс атрибутом, можно, используя
анализ типа: </p>
<blockquote>
<p><code><strong>begin</strong> <br>&nbsp; <strong>var</strong> t := typeof(My);
<br>&nbsp; <strong>var</strong> attrs := t.GetCustomAttributes(false); <br>&nbsp;
<strong>foreach</strong> <strong>var</strong> attr <strong>in</strong> attrs
<strong>do</strong> <br>&nbsp;&nbsp;&nbsp; <strong>if</strong> attr <strong>is</strong> AuthorAttribute (<strong>var</strong> auth)
<strong>then</strong> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Print(auth.Name);
<br><strong>end</strong>.</code></p>
</blockquote>
<p>&nbsp;</p>
</body>
</html>