私が書いているクラスのいくつかの属性 (別名アノテーション) を照会したいと思います。
複雑な方法で行うこともできますが、代わりに 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 の本など) に必要な無数の行を記述する必要はありません。