在我工作的地方,我们仍在使用Delphi 2009.我碰巧看着VCL中的Forms单元并偶然发现:
[UIPermission(SecurityAction.LinkDemand, Window=UIPermissionWindow.AllWindows)]
function DisableTaskWindows(ActiveWindow: HWnd): TTaskWindowList;
此属性显然是CLR类UIPermissionAttribute
,但与CLR的其他引用不同,此属性未包含在条件编译指令中。
这让我感到惊讶,因为AFAIK,在2010年之前的Delphi Win32版本中,仅用于数组和集合类型中的索引表示法,定义集合并为接口分配GUID。情况似乎并非如此。
我进行了正则表达式搜索,并在整个RTL / VCL中找到了几十个示例。有些是类型的属性,有些属于方法。
这些只是被编译器忽略了,还是在Win32中用于某些目的?
我还发现了类似的语法:
[!UnitName]
[!InterfaceName]
这似乎与在IDE向导中从模板生成源文件有关,但这些文件不在RTL源文件夹中。它们位于对象存储库文件夹中。
答案 0 :(得分:0)
我原本希望属性可能是一个无证的特征,类似于类记录员在记录之前可以使用多年,但事实并非如此。
我尝试了一个简单的测试,并在类定义之前添加了属性表示法。编译器没有阻塞它,但确实发出警告,不支持自定义属性。