Сегодня я переписывал здесь несколько вещей, и я попал в проблему, и я не знаю ответа.Конструктор атрибутов с параметром массива
я создал следующий атрибут:
Enumeration<T> = class(TCustomAttribute)
strict private
{ Private declarations }
FValues : TList<T>;
public
{ Public declarations }
constructor Create(const AValues : array of T);
destructor Destroy(); override;
public
{ Public declarations }
property Values : TList<T> read FValues;
end;
с этим в виду, я могу использовать этот атрибут только штрафом в следующем классе, например:
[Entity('tablename')]
TUser = class(TEntity)
strict private
[Column('idcolumnname')]
[PrimaryKey(True)]
Fid : TInteger;
[Column('typecolumnname')]
[Enumeration<string>(['A', 'B', 'C', 'D', '...'])]
Ftype: TEnumeration<string>;
end;
это здорово, что он работал, но idk, мне кажется, что это не должно работать, по моему невежеству, атрибуты delphi ожидают только постоянные типы и не только используют массив как пареметр, но и общий.
движется перемещение вперед, я сделал этот атрибут:
Association = class(TCustomAttribute)
strict private
{ Private declarations }
FMasterKeys : TList<string>;
FDetailKeys : TList<string>;
public
{ Public declarations }
constructor Create(const AMasterKeys, ADetailKeys : array of string);
destructor Destroy(); override;
public
{ Public declarations }
property MasterKeys : TList<string> read FMasterKeys;
property DetailKeys : TList<string> read FDetailKeys;
end;
и пытался использовать в этом классе:
[Entity('tablename')]
TSuperUser = class(TEntity)
strict private
[Association(['masterkey'], ['detailkey'])]
Fuser : TAssociation<TUser>;
end;
я получил ошибку [DCC Error] E2026 Постоянное выражение ожидается.
ОК, поэтому в резюме я просто не знаю, что происходит Почему я могу использовать массив T как параметр атрибута, а не массив строки, например.
ТНХ за любую помощь заранее
http://stackoverflow.com/questions/25746629/vcl-printers-pas888-w1025-unsupported-language-feature-custom-attribute –
@David ТНХ для справки – kabstergo