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