ZeD*_*aye 13 delphi enumeration rtti delphi-2010
考虑这样的枚举:
type
TTypeOfData = (
[XmlName('ABC')] todABC,
[XmlName('DEF')] todDEF,
[XmlName('GHI')] todGHI
);
Run Code Online (Sandbox Code Playgroud)
其中XmlName是一个自定义属性,用于为此枚举的成员定义序列化字符串.
如何浏览附加到此枚举的每个成员的属性?
All*_*uer 18
虽然巴里清楚地回答了关于枚举元素属性的问题,但我会另外提出一个建议.从你的例子中,你在每个枚举元素前面加上'tod',这在Delphi中是传统的,因为枚举元素在范围上是全局的(即如果除了todABC枚举元素之外你在范围内有标识符todABC,你可以得到一些奇怪的行为).
从D2007开始,我们引入了"范围枚举"的概念,当启用它时,要求您使用枚举本身的标识符限定枚举元素.例如:
{$SCOPEDENUMS ON}
type
TTypeOfData = (ABC,DEF,GHI);
Run Code Online (Sandbox Code Playgroud)
将要求您将ABC元素称为TTypeOfData.ABC.这允许您使用非前缀的枚举元素标识符,并且不会冒着冲突的风险,因为元素被"限定"为枚举.启用{$ SCOPEDENUMS}时声明的任何枚举都将以这种方式运行.
鉴于此,您现在可以安全地使用RTTI以您希望的格式获取实际的枚举元素名称.
Bar*_*lly 14
与枚举中的元素关联的属性当前未存储在可执行文件中的Win32 RTTI数据中.RTTI已经负责公平地增加可执行文件的大小,因此必须在某处绘制一些行.Delphi Win32中的属性在类型,记录字段,字段,方法,参数和类属性上受支持.
由于与Delphi for .NET的向后兼容性,属性声明不会导致错误.
| 归档时间: |
|
| 查看次数: |
3648 次 |
| 最近记录: |