【发布时间】:2011-08-22 15:00:48
【问题描述】:
考虑以下(不可编译的)代码:
program AttributesTestProgram;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes,
RTTI;
type
TDisplayTextAttribute = class(TCustomAttribute)
private
FDisplayText: string;
public
constructor Create(aDisplayText: string);
property DisplayText: string read FDisplayText write FDisplayText;
end;
constructor TDisplayTextAttribute.Create(aDisplayText: string);
begin
FDisplayText := aDisplayText;
end;
function GetFirstName: string;
begin
Result := 'First Name';
end;
type
TCustomer = Class(TObject)
private
FFirstName: string;
FLastName: string;
FStreetAddress: string;
FZIP: string;
FState: string;
FCity: string;
FPhone: string;
published
[TDisplayTextAttribute(GetFirstName)]
property FirstName: string read FFirstName write FFirstName;
end;
begin
// Code that does the work removed for clarity....
Readln;
end.
我自然想知道为什么编译失败并出现错误:
[DCC Error] AttributesTestProgram.dpr(40): E2026 Constant expression expected
我认为这与属性必须在编译器时绑定的想法有关,或者类似的东西。
因此,我的问题是:
有什么方法可以在这里“击败系统”并在属性中的那个位置获取运行时值?
【问题讨论】: