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'));

Другие вопросы по тегам