Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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&#133


 
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;

Вобщето ни очем не говорит, нужна диаграмма классов&#133

Может возможно создать наследника класса Connections[i] и там переопределить Close&#133


 
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;


Вызывать можно любую&#133


> Короче, ServerSocket — это класс ТServerSocket,

Я с этим незнаком, но уверен многие другие знакомы&#133


> 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 — метод

Еще раз повторяю последовательность вызовов почти ничего не раскрывает, нужна диаграмма классов, или её словесное описание&#133


 
Alexey (AZ)   (2007-03-18 20:05) [8]

Метод статический, оверрид неприменим. Вам видится решение в создании своего класса таким образом, что обеъкт ServerSocket должен стать TMyserverSocket. Я правильно понимаю? Это не просто класс, а компонент, поэтому я интересуюсь как бы перехрячить всего-навсего один метод, без перенаследований.


 
Kolan ©   (2007-03-18 20:13) [9]

> Я правильно понимаю?

Нет мне видится не так. Создать надо подкласс класса экземплярами которого являются элементы Connections(те Connections[i]).


> Это не просто класс, а компонент, поэтому я интересуюсь
> как бы перехрячить всего-навсего один метод, без перенаследований.

Идеальный вариант — «хелперы»&#133 Мож всетаки нароете BDS, TurboDelphi

PS
 Что они есть в Turbo версии неуверен&#133

PSS
 Есть еще вариан, если все это стандартные компоненты, возможно вы просто не умеете ими пользоваться. Возможно вообще менять ниче ненадо&#133


 
Kolan ©   (2007-03-18 20:14) [10]

> Метод статический, оверрид неприменим.

Ну закройте его раз так нужно&#133


 
Kolan ©   (2007-03-18 20:14) [11]

> Это не просто класс, а компонент,

Ну а в чем разница? Сделайте свой компонент, какие проблеммы&#133


 
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.5 MB
Время: 0.04 c
15-1176455304
Andy BitOff
2007-04-13 13:08
2007.05.13
Помогите найти музыку.


15-1176554514
Kerk
2007-04-14 16:41
2007.05.13
Интересный сервис


2-1177495186
cvg
2007-04-25 13:59
2007.05.13
эстетичное обращение к последнему элементу массива


15-1176231879
Иксик
2007-04-10 23:04
2007.05.13
Посоветуйте чего-нибудь почитать


2-1177065874
..::KraN::..
2007-04-20 14:44
2007.05.13
Поиск