Синтаксис атрибутов в Delphi 2009 RTL / VCL? - PullRequest
4 голосов
/ 16 февраля 2012

Там, где я работаю, мы все еще используем Delphi 2009. Я случайно посмотрел на модуль Forms в VCL и наткнулся на:

[UIPermission(SecurityAction.LinkDemand, Window=UIPermissionWindow.AllWindows)]
function DisableTaskWindows(ActiveWindow: HWnd): TTaskWindowList;

Этот атрибут явно является классом CLR UIPermissionAttribute, но в отличие от других ссылок на CLR, этот атрибут не включен в директивы условной компиляции .

Это меня удивило, потому что, AFAIK, в версиях Delphi Win32 до 2010 скобки использовались только для обозначения индекса вмассивы и типы коллекций, определение наборов и назначение идентификаторов GUID для интерфейсов.Похоже, что это не так.

Я провел поиск по регулярному выражению и нашел десятки примеров по всему RTL / VCL.Некоторые из них были атрибутами для типов, а некоторые для методов.

Они просто игнорируются компилятором или они служат какой-то цели в Win32?


Я также нашел синтаксис, который выглядел следующим образом:

[!UnitName]
[!InterfaceName]

Что, похоже, связано с генерацией исходных файлов из шаблона в мастере IDE, но их не было в исходной папке RTL.Они были в папке хранилища объектов.

1 Ответ

0 голосов
/ 16 февраля 2012

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

Я попробовал простой тест и добавил обозначение атрибута перед определением класса. Компилятор не подавился этим, но выдал предупреждение о том, что пользовательские атрибуты не поддерживаются.

...