![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Список(TList) методов. Как вызвать метод?
Kolan © (2007-05-20 12:24:00)Здравствуйте,
Есть тип:TAttachCallBack = procedure(Subject: TSettingsManager) of object;
Я же могу хранить список таких методов? Вроде могу.
FObserverCallBacks: TList;
Как их помещать в список? Вроде справился:
procedure TSettingsManager.Attach(AObserverCallBack: TAttachCallBack);
begin
FObserverCallBacks.Add(@AObserverCallBack);
end;
А как теперь вызывать?
procedure TSettingsManager.NotifyObservers;
var
I: Integer;
CurrentCalback: TAttachCallBack;
begin
for I := 0 to FObserverCallBacks.Count 1 do
begin
CurrentCalback := TAttachCallBack(FObserverCallBacks[I]);
CurrentCalback(Self);
end;
end;
Получаю:
[Pascal Fatal Error] KAcousticPressureConverterGlobalSettings.pas(63): F2084 Internal Error: C4989
Так как же правильно их вызывать?
Юрий Зотов (2007-05-20 23:28:00) [1]> Kolan © (20.05.07 22:53) [5]
Наследоваться от TFileStream, а RefCount реализовать самому, по аналогии с TInterfacedObject.
Kolan (2007-05-20 22:53:00) [2]> реазовать в TLogManager (или в его потомке) интерфейс IObserver?
А я незнаю как.TInterfacedObjectиTFileStream родители должны быть а мн. наследования нет :)
Или вы предлогаете безTInterfacedObject'а обойтись?
TStas (2007-05-20 15:17:00) [3]x: CurrentCalback;
....
@x = TAttachCallBack(FObserverCallBacks[I]);
x(Self)
Юрий Зотов (2007-05-20 15:02:00) [4]А почему не сделать нормально - реазовать в TLogManager (или в его потомке) интерфейс IObserver?
Kolan (2007-05-20 13:28:00) [5]> См. TMethod
> сюда еще глянь:
Ясно. Получается нужно знать еще и TMyClass
Опишу задачу, может подругому можно
Мне нужен Observer, ноTConcreteObserverдолжен реализовавыть интерфейсIObserver.
То есть:
TConcreteObserver = class(TInterfacedObject, IObserver)
А что делать если мне надо сделать Обозревателем такой класс:
TLogManager = class(TFileStream)
Или такой
TGraphManager = class
?
Вот я и решил что вAttachпередавать надо не объект а метод, может можно проще?
MBo (2007-05-20 12:51:00) [6]>Я же могу хранить список таких методов? — Вроде могу.
Нет, прямо так - не можешь, поскольку метод объекта - 8 байт.
См. TMethod
сюда еще глянь:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1179297317&n=18