Текущий архив: 2007.05.13;
Скачать: CL | DM;
Вниз
Переопределить глубокозарытый метод. Найти похожие ветки
← →
Alexey (AZ) (2007-03-18 18:56) [0]Доброго времени!
Возник вопрос, думаю как можно сделать. Исходник вот:
ServerSocket.Socket.Connections[i].Close;
Мне бы прокопать до Close и прилепить в него часть своего кода. Править исходники-оригиналы с этими классами не хочется. Не придется ли мне перенаследовать всю эту цепочку в обратном порядке? (Т.е. переписать Connections[i] с своим Close, на них построить MySocket из Socket, на них MyServerSocket из Serversocket ... короче, я думаю что понятно). Меня, мягко говоря, такая идея не привлекает, а говоря по правде, это полная ж... =)
p.s. Влепить свой код в событие OnClose/OnDisconnect не предлагать.
← →
Kolan © (2007-03-18 19:03) [1]Прочитай про class helpers, если у тебя © BDS 2006…
← →
Alexey (AZ) (2007-03-18 19:12) [2]А если не BDS 2006 ?
← →
Kolan © (2007-03-18 19:20) [3]> А если не BDS 2006 ?
Если
> Править исходники-оригиналы с этими классами не хочется.
то подругому никак, имхо.
> Т.е. переписать Connections[i] с своим Close,
а можетoverload
?
← →
Kolan © (2007-03-18 19:22) [4]> ServerSocket.Socket.Connections[i].Close;
Вобщето ни очем не говорит, нужна диаграмма классов…
Может возможно создать наследника классаConnections[i]
и там переопределить Close…
← →
Alexey (AZ) (2007-03-18 19:40) [5]Что такое overload? =)
Короче, ServerSocket - это класс ТServerSocket, в нем есть Socket - TXXXServerWinSocket, в котором есть массив Connections - TXXXCustomSocket. Просто сейчас точные названия классов привести не могу.
Здесь ServerSocket - объект, Socket - свойство, Connections[i] - свойство и наконец Close - метод. Я не знаю как иначе объяснить, вроде вопрос должен быть поянтен.
← →
Kolan © (2007-03-18 19:51) [6]> Что такое overload? =)
Это директива, подробно в справке, а сокращенно:
overload — перегрузка операций.
Пример:procedure Close; overload;
procedure Close(SomeParam: Integer); overload;
Вызывать можно любую…
> Короче, ServerSocket — это класс ТServerSocket,
Я с этим незнаком, но уверен многие другие знакомы…
> Connections[i] — свойство
Ну и что? Какой тип у этого свойства?
Например если:TSomeObject = class
procedure Close; virtual;
end;
иConnections[i]: TSomeObjectList;
То можно сделать наследника TSomeObject и перекрытьClose
:TAnotherSomeObject = class(TSomeObject)
procedure Close; override;
end;
← →
Kolan © (2007-03-18 19:58) [7]> Здесь ServerSocket — объект, Socket — свойство, Connections[i]
> — свойство и наконец Close — метод
Еще раз повторяю последовательность вызовов почти ничего не раскрывает, нужна диаграмма классов, или её словесное описание…
← →
Alexey (AZ) (2007-03-18 20:05) [8]Метод статический, оверрид неприменим. Вам видится решение в создании своего класса таким образом, что обеъкт ServerSocket должен стать TMyserverSocket. Я правильно понимаю? Это не просто класс, а компонент, поэтому я интересуюсь как бы перехрячить всего-навсего один метод, без перенаследований.
← →
Kolan © (2007-03-18 20:13) [9]> Я правильно понимаю?
Нет мне видится не так. Создать надо подкласс класса экземплярами которого являются элементы Connections(те Connections[i]).
> Это не просто класс, а компонент, поэтому я интересуюсь
> как бы перехрячить всего-навсего один метод, без перенаследований.
Идеальный вариант — «хелперы»… Мож всетаки нароете BDS, TurboDelphi
PS
Что они есть в Turbo версии неуверен…
PSS
Есть еще вариан, если все это стандартные компоненты, возможно вы просто не умеете ими пользоваться. Возможно вообще менять ниче ненадо…
← →
Kolan © (2007-03-18 20:14) [10]> Метод статический, оверрид неприменим.
Ну закройте его раз так нужно…
← →
Kolan © (2007-03-18 20:14) [11]> Это не просто класс, а компонент,
Ну а в чем разница? Сделайте свой компонент, какие проблеммы…
← →
Alexey (AZ) (2007-03-18 20:29) [12]Ладно, буду использовать OnClose. Вроде ничем не хуже должно быть.
← →
Плохиш © (2007-03-19 01:45) [13]
> Alexey (AZ) (18.03.07 20:29) [12]
> Ладно, буду использовать OnClose.
Тем более он для описанного в [0] и предназначен...
← →
Сергей М. © (2007-03-19 08:25) [14]
> Alexey (AZ)
Если уж так приспичило, то перекрывать следует не Close, а Disconnect().
Это виртуальный метод, и Close не делает ничего иного, кроме вызова этого метода.
Но при наличии события On[Client]Disconnect вся эта затея действительно лишена смысла.
Страницы: 1 вся ветка
Текущий архив: 2007.05.13;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.036 c