Есть ли способ узнать, создается или уничтожается объект внутри помощника класса?

У меня есть несколько хелперов классов для компонентов для создания подкомпонентов -, таких как всплывающие меню, для доступа к этим подкомпонентам -во время выполнения я создаю Singleton TDictionary.

Мой вопрос: как узнать, что компонент владельца -уничтожается, чтобы удалить компонент -из TDictionary?

Если это специализированный компонент, я добавляю его в деструктор, но я не могу добавить конструктор и/или деструктор в хелпер класса.

Правка -Решение

Я создал базовый объект, который принимает TObject в качестве параметров, при использовании действие удаления необходимо выполнять вручную.

Затем я унаследовал от него новый класс, переопределив методы, чтобы они принимали только TComponent. Вот как теперь выглядит соответствующая часть кода:

type     
  TCustomLinkedComponents = class(TCustomLinkedObjects)
  strict private
    type
      TCollector = class(TComponent)
      protected
        procedure Notification(AComponent: TComponent; Operation: TOperation); override;
      end;
  strict private
    FCollector: TCollector;
[..]
  end;

procedure TCustomLinkedComponents.Add(Owner: TComponent; const LinkedName: string; LinkedComponent: TComponent);
begin
  inherited Add(Owner, LinkedName, LinkedComponent);
  FCollector.FreeNotification(LinkedComponent);
end;

procedure TCustomLinkedComponents.TCollector.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if Operation = opRemove then
    LinkedObjects.Remove(TObject(AComponent));
end;

Используя этот подход, я могу решить свою настоящую потребность и позволить открыться, чтобы ее можно было легко расширить.

5
задан Cesar Romero 1 August 2012 в 22:42
поделиться