Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / RTTI атрибуты у Generic класса / 5 сообщений из 5, страница 1 из 1
16.05.2018, 16:55
    #39645666
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RTTI атрибуты у Generic класса
Объявляю кастомный атрибут
Код: pascal
1.
TMyAttr = class(TCustomAttribute);


Описываю свойство этим атрибутом
Код: pascal
1.
2.
3.
4.
5.
6.
7.
TMyClass = class
strict private
  FID: Integer;
public
  [TMyAttr]
  property ID: Integer read FID write FID;
end;

пытаюсь его прочитать
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TestAttr(AObj: TObject);
var
  LCtx: TRttiContext;
  LType: TRttiType;
  LProps: TArray<TRttiProperty>;
  LAttrs: TArray<TCustomAttribute>;
begin
  LCtx := TRttiContext.Create;
  try
    Writeln(AObj.ClassName);
    LType := LCtx.GetType(AObj.ClassInfo);
    LProps := LType.GetProperties;
    Writeln('Props count: ', Length(LProps));
    LAttrs := LProps[0].GetAttributes;
    Writeln('Attrs count: ', Length(LAttrs));
  finally
    LCtx.Free;
  end;
end;

TestAttr(TMyClass.Create);

получаю
TMyClass
Props count: 1
Attrs count: 1Все работает.

Дальше, помечаю этим же атрибутом свойство generic-класса
Код: pascal
1.
2.
3.
4.
5.
6.
7.
TMyClass2<T> = class
strict private
  FID: Integer;
public
  [TMyAttr]
  property ID: Integer read FID write FID;
end;

читаю
Код: pascal
1.
TestAttr(TMyClass2<TObject>.Create);

получаю 0 атрибутов
TMyClass2<System.TObject>
Props count: 1
Attrs count: 0
Вопрос, что я делаю не так и что нужно добавить, чтобы у generic-класса тоже читались атрибуты?

Delphi XE3

С уважением, Vasilisk
...
Рейтинг: 0 / 0
16.05.2018, 19:27
    #39645753
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RTTI атрибуты у Generic класса
В Delphi XE6
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
program Project2;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Rtti;

type
  TMyAttr = class(TCustomAttribute);

  TMyClass2<T> = class
  strict private
    FID: Integer;
  public
    [TMyAttr]
    property ID: Integer read FID write FID;
  end;

procedure TestAttr(AObj: TObject);
var
  LCtx: TRttiContext;
  LType: TRttiType;
  LProps: TArray<TRttiProperty>;
  LAttrs: TArray<TCustomAttribute>;
begin
  LCtx := TRttiContext.Create;
  try
    Writeln(AObj.ClassName);
    LType := LCtx.GetType(AObj.ClassInfo);
    LProps := LType.GetProperties;
    Writeln('Props count: ', Length(LProps));
    LAttrs := LProps[0].GetAttributes;
    Writeln('Attrs count: ', Length(LAttrs));
  finally
    LCtx.Free;
  end;
end;

begin
  TestAttr(TMyClass2<TObject>.Create);
  readln;
end.


TMyClass2<System.TObject>
Props count: 1
Attrs count: 1
...
Рейтинг: 0 / 0
16.05.2018, 19:34
    #39645755
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RTTI атрибуты у Generic класса
X-CiteВ Delphi XE6Блин! Что-то подобное чувствовал
...
Рейтинг: 0 / 0
16.05.2018, 20:40
    #39645778
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RTTI атрибуты у Generic класса
_Vasilisk_,

Посвежее сильно получше стали, есть такое. Сам на XE6 сижу. Видимо - минимально из XE-шек нормально юзабельная. Хотя, конечно, зависит что делать.
...
Рейтинг: 0 / 0
16.05.2018, 21:37
    #39645793
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RTTI атрибуты у Generic класса
makhaon,

Мы купили Токио. Я даже поставил его. Но все нет времени переползти. Может это меня вдохновит :)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / RTTI атрибуты у Generic класса / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]