Книга: C# для профессионалов. Том II
Иерархия классов WebRequest и WebResponse
Иерархия классов WebRequest и WebResponse
В этом разделе более подробно рассматривается архитектура классов WebRequest
и WebResponse
.
Иерархия наследования вовлеченных классов показана на диаграмме.
Диаграмма показывает, что иерархия содержит более двух классов, которые используются в коде. Фактически оба класса WebRequest
и WebResponse
являются абстрактными, и поэтому нельзя создать экземпляры этих классов. Они существуют как базовые классы для предоставления общей функциональности для работы с запросами и ответами Web независимо от протокола, используемого в данной операции. Любой такой запрос всегда делается с помощью определенного протокола (HTTP, Telnet, FTP, SMTP и т. д.) и выполняется с помощью производного класса для этого протокола. В предыдущем коде, хотя ссылочные переменные были определены как ссылки на базовый класс, метод WebRequest.Create()
в действительности давал объект HttpWebRequest
, а метод GetResponse()
возвращал объект HttpWebResponse тоже в действительности. Почему же этого не видно в коде явно? Ответ заключается в том, что компания Microsoft предоставила механизм на основе фабрики для сокрытия деталей иерархии классов от клиентского кода. Тот факт, что требуется объект, который может иметь дело с протоколом HTTP, очевиден из URI, подставляющего в WebRequest.Create()
: http://www.wrox.com
. WebRequest.Create()
проверяет в URI спецификатор протокола и использует это для создания экземпляра и возврата объекта соответствующего класса. Цель состоит в том, чтобы никогда не использовать конструктор для создания экземпляра объекта WebRequest; таким образом появляется в некоторой степени свобода от необходимости что-либо знать о производных классах. Следует заметить, что теория немного отказывает, если нужно использовать какие-то специальные свойства используемого протокола, которые реализованы как методы производного класса, и в этом случае необходимо выполнить преобразование типа ссылки WebRequest
или WebResponse
в производный класс.
Теоретически с помощью этой архитектуры можно обрабатывать отправку запросов с помощью любого из распространенных протоколов. Однако компания Microsoft в действительности написала производные классы, охватывающие протоколы HTTP и file://
. Если желательно иметь дело с другими протоколами, например, FTP, Telnet или SMTP, то нужно либо воспользоваться API Windows и написать свои собственные классы (которые будут внутренне реализованы с помощью Windows API), или ждать, пока независимые поставщики программного обеспечения напишут подходящие классы .NET.
- Иерархия
- Иерархия объектов в InterBase
- 1.7 Иерархия драйверов систем хранения и типы драйверов
- 9.7.4. Иерархии классов и абстрактные классы
- 8.8.5. Шаг 4. Задание интерфейсов классов
- У14.4 Наследование без классов
- 3.6. Качество классов и объектов
- Соотношение классов и записей
- Иерархия компонентов в IBX
- Лекция № 12. Связи классов сущностей
- 6. Лекция: Объявление классов
- Управление созданием базовых классов с помощью base