Delphi: Как разрешить установку TClass-свойства TCollectionItem во время разработки
Я разрабатываю компонент, который работает на нескольких классах. Чтобы разрешить добавление списка управляемых классов, я написал унаследованный класс TCollection, в котором каждый элемент (унаследованный от TCollectionItem) определяет опубликованное свойство "TargetClassName". Функция установки свойства TargetClassName вызывает следующую функцию, чтобы найти соответствующий класс TClass:
function FindAnyClass(const Name: string): TClass;
var
ctx: TRttiContext;
typ: TRttiType;
list: TArray<TRttiType>;
begin
Result := nil;
ctx := TRttiContext.Create;
list := ctx.GetTypes;
for typ in list do
begin
if typ.IsInstance and (EndsText(Name, typ.Name)) then
begin
Result := typ.AsInstance.MetaClassType;
break;
end;
end;
ctx.Free;
end;
(Спасибо Dalija Prasnikar за написание функции Get class по имени в Delphi).
Теперь мне интересно, есть ли лучший способ разрешить добавление классов в TCollectionItem во время разработки. Что вы об этом думаете? Надеюсь прочитать интересные решения! Спасибо всем.
1 ответ
При создании на TCollection Вам необходимо ввести класс сопоставления, это возможно двумя способами: 1: жестко закодировано во время создания X:= TMycollation.Create(TMyCollationClass) 2: ваше решение X:= TMycollation.Create(FindAnyClass('TMyCollationClass'));