powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / RTTI атрибуты у Generic класса
5 сообщений из 5, страница 1 из 1
RTTI атрибуты у Generic класса
    #39645666
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объявляю кастомный атрибут
Код: 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
RTTI атрибуты у Generic класса
    #39645753
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 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
RTTI атрибуты у Generic класса
    #39645755
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteВ Delphi XE6Блин! Что-то подобное чувствовал
...
Рейтинг: 0 / 0
RTTI атрибуты у Generic класса
    #39645778
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

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

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


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