Требуется ли для атрибутов Delphi постоянный параметр? Если да, то почему?

Рассмотрим следующий (некомпилируемый) код:

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

Я предполагаю, что ему есть чем заняться с идеей, что атрибуты должны быть связаны во время компиляции, или что-то в этом роде.

Таким образом, мои вопросы таковы:

Есть ли способ «обыграть систему» ​​здесь и получить значение времени выполнения в этом месте в атрибуте?

6
задан Nick Hodges 10 May 2011 в 16:15
поделиться