Рассмотрим следующий (не компилируемый) код:
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
Я предполагаю, что это как-то связано с идеей, что атрибуты должны быть связаны во время компиляции, или что-то в этом роде.
Следовательно, мои вопросы таковы:
Есть ли какой-нибудь способ "разбить систему" здесь и получить значение времени выполнения в этом месте в атрибуте?