Можно ли получить ссылку на класс используя атрибуты?

Arshehremen
Дата: 31.05.2019 23:20:26
Всем привет!
Задумал коварное действие, но уже 3 или 4 часа сижу гуглю и не могу найти ответ.
Собственно "Можно ли получить ссылку на класс используя атрибуты?"
Например, для кода ниже хочу получить ссылки на TDog и TCat
     
TSAttribute = class(TCustomAttribute)
     private
          FName: string;
     public
          constructor Create(const Name : string);
          property Name : string read FName write FName;
     end;

TSomething = class
end;

[TS('Dog')]
TDog = class(TSomething)
end;

[TS('Cat')]
TCat = class(TSomething)
end;


В конечном итоге хочу это использовать, чтобы генерить юниты - с классами объектов, в идеале ничего не добавляя в другие классы.
Сейчас в "главном модуле" это выглядит следующим образом:
...
var DogID, CatID:integer;
implementation
uses DogUnit,CatUnit;

constructor TMain.Create();
     begin
          inherited;
          objectTypes := TTypesList.Create ;//TTypesList это TList
          objectTypes.Add(TDog); DogID:=objectTypes.Count-1; {0}
          objectTypes.Add(TCat);  CatID :=objectTypes.Count-1; {1}
     end;


при добавлении очередной собаки нужно добавлять модуль в юзесы и строчку в список. Хочу сделать инверсально.
softwarer
Дата: 31.05.2019 23:24:26
Arshehremen
при добавлении очередной собаки нужно добавлять модуль в юзесы и строчку в список. Хочу сделать инверсально.

Это делается куда проще.

unit Dog;

interface

implementation

uses Animals;

type
  TDog = class(TAnimal)
  ...

initialization
  RegisterAnimal(TDog);

end.
Arshehremen
Дата: 01.06.2019 00:13:47
softwarer, вау, спасибо. не знал про такую фичу!

Но остаётся вопрос с добавлением нужного класса в список. Для этого я и хотел использовать атрибуты.
softwarer
Дата: 01.06.2019 00:20:54
Arshehremen
Но остаётся вопрос с добавлением нужного класса в список.

RegisterAnimal решает этот вопрос.
Arshehremen
Дата: 01.06.2019 00:55:59
softwarer, точно, спасибо! Всё получилось! Сначала подумал, что функция в initialization нужна чтобы зарегистрировать класс.