【发布时间】:2014-07-16 15:09:55
【问题描述】:
我想查询我正在编写的类中的一些属性(也称为注解)。
我可以用复杂的方式来做,但我想改用 Spring4D。
它有一个名为Reflection 的单元,看起来它有我需要的东西,但我不知道如何使用它。
我在网上看过,但是没有关于如何使用这个单元的例子。
我找到了:
THasAttributeFilter
看起来像这样:
THasAttributeFilter<T: TRttiObject> = class(TMemberSpecificationBase<T>)
private
fAttributeClass: TAttributeClass;
protected
function Accept(const member: T): Boolean; override;
public
constructor Create(attributeClass: TAttributeClass);
end;
太好了,所以我创建了一个这样的过滤器:
type
Capability = (CanDoA, CanDoB);
TCapabilities = set of Capability;
[Capabilities(CanDoA)]
TMyClass = class(TParent)
strict private
class var fCapabilities: TCapabilities;
....
public
property Capabilities: TCapabilities read GetCapabilities;
end;
我可以像这样创建一个 HasAttributeFilter:
HasAttr:= THasAttributeFilter<TMyClass>.Create(CapabilitiesAttribute);
... ?? now what ??
我如何使用 Spring4D 来测试属性,而不必编写经典 RTTI 编写(例如根据 Nick Hodges 的书)所需的无数行?
【问题讨论】:
-
您在属性行中有一些错别字,编辑器不允许我们更改,因为它们显然太琐碎了。您可能想要编辑它们。
-
@DavidSchwartz 属性可以包含可以在编译时评估的所有内容,而不仅仅是“整数和数字”。此外,Embarcadero 本身不使用
T为属性添加前缀。没有人说他们“必须”以T开头 -
@DavidSchwartz,修正了错字。不过你需要复习一下属性,看看:malcolmgroves.com/blog/?p=476
-
感谢您的提示,伙计们!
标签: delphi attributes spring4d