| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Преобразование к базовому классу |
| Автор: radow 29.1.2010, 01:59 | ||||
| Привет всем!!! Есть такая проблемка Есть такой класс
как выполнить такое преобразование
|
| Автор: Ceiceron 29.1.2010, 09:42 | ||
Я так понимаю listener.EndAcceptTcpClient(ar) возвращает TcpClient, тогда преобразовать базовый класс к наследнику не получиться. Возможно только обратное. Так что тут может помочь создание наследника по базовому классу. Например добавить еще один конструктор в наследника, который будет создавать объект наследника на основе базового класса.
|
| Автор: tol05 29.1.2010, 12:29 | ||
Ceiceron, но ведь здесь вместо наследования применяется композиция? Как созданный таким образом объект tcp получит доступ к защищенным членам объекта TcpClient? Т.е. имеем декоратор, с делегированием всех вызовов внутреннему объекту TcpClient... Не знаю, это ли - то нужно автору.
|
| Автор: Ceiceron 29.1.2010, 13:25 | ||||
в том-то и дело, что tcp всегда будет null, особенно если использовать as.
clientClass является наследником TcpClient, он так и так будет иметь доступ к защищенным членам класса. в любом случае для инициализации clientClass потребуются только публичные свойства TcpClient. |
| Автор: Ceiceron 30.1.2010, 19:39 |
| Понятное дело, что таким образом не получиться получить доступ к protected полям. Но суть вопроса в том как получить от базового объекта экземпляр объекта-наследника. Простым приведением не получиться, соответственно нужно создавать наследник либо по базовому классу, как совершенно новый объект, либо использовать базовый тип по другому, например как поле класса обертки. Ваш вариант в as не прокатит. Предложите вариант решения вопроса. |
| Автор: tol05 31.1.2010, 00:17 |
| Ceiceron, я согласен с Вами. Единственный вариант - хранить в clientClass ссылку на TcpClient и делегировать все функции ему. Получим wrapper объекта TcpClient с некоторыми дополнительными сервисами, но и с возможностями, которыми обладает любой обычный клиент, использующий объект TcpClient. |