Г. Шилдт - С#4.0 Полное руководство (1160795), страница 206
Текст из файла (страница 206)
Обратимся к следующему примеру, в котором создается коллекция типа 11яс<СЬаг>, инициализируемая символами С, А, Е, В, Т) и Р. 11вс<сааг> 1яс = вен Ъляс<съаг>() ( 'С', 'А', 'Е', 'В', 'В', 'Р' После выполнения этого оператора значение свойства 1 я С. С о наг будет равно 6, поскольку именно таково число инициализаторов. А после выполнения следующего цикла Тогеасп; Гсгеясп(сь )н 1вс) Ссвяс1е.нггсе(сЬ Я получится такой результат: СЛЕВОГ Для инициализации коллекции типа 11п)гес(11яг<ТКеу, ТЧа1се>, в которой хранятся пары "ключ-значение", инициализаторы приходится предоставлять парами, как показано ниже. зсгсег)11яс<1пс, ясггнэ> 1яв вен зсггес)11яг<1нг, ягг1вч>() ( (1, "один"), (2, "два" ), (3, "три") 1010 Часть! 1.
Библиотека С(г Компилятор передаст каждую группу значений в качестве аргументов методу )(с(а ( ) . Следовательно, первая пара инициализаторов преобразуется компилятором в вызов Р(с)с( (1, "один" ) . Компилятор вызывает метод )(с)с) ( ) автоматически для ввода инициализаторов в коллекцию, и поэтому инициализаторы коллекций можно использовать только в коллекциях, поддерживающих открытую реализацию метода )(с(с( ( ) . Это означает, что инициализаторы коллекций нельзя использовать в коллекциях типа Бгаск„ясаск<Т>, 0сепе или 0иесе<Т>, поскольку в них метод )(г(с) () не поддерживается. Их нельзя применять также в тех коллекциях типа ).зпкес)т.ьзг<Т>, где метод Ыс) () предоставляется как результат явной реализации соответствующего интерфейса.
1012 Часть! Е Библиотека С№ связанных с сетевым подключением к Интернету, относится пространство Буяген. ХеЬ. Это и вложенные в него пространства имен поддерживают сетевые приложения на основе технологии АБР.НЕТ. В среде .А)ЕТ Ргашетчог)г имеется достаточно гибких средств и возможностей для сетевого подключения к Интернету. Тем не менее для разработки многих приложений более предпочтительными оказываются функциональные возможности, доступные в пространстве имен Яуя ген. Нег.
Они и удобны, и просты в использовании. Именно поэтому пространству имен Яуясев. Хес будет уделено основное внимание в этой главе. Члены пространства имен Яув~ев1. Бе~ АЧГЬогггасгоп АЧГЬепт1сас1опМападег Соок1еСо11есс1оп Соок1е Соок1еЕхсерт1оп СоокгеСопса1пег Сгебепсга1СасЬе Опя ОпяРегн1яя1оп РпяЕпбРогпс ОпяРегы1яя1опАГГг1Ьпте Оонп1оабРатаСоыр1есебЕчепГАгоя Роип1оабРгодгеяяСЬапЯебЕчепГАгдя Оонп1оабБГг1пдСотр1есебЕчепГАгдя Еабро1пГРегв1яя1оп ЕпбРо1пс Р11енеЬНеопеяс Г11енеЬНеяропяе ГсрнеЬНеяропяе ГсрнеЬНеопеяг НссрЬ№ясепегВая1с1бепт1ту НГГРВ1ятепегЕхсерс1оп НстрЬ1ясепег НГГрЬ№ясепегСоптехс НГГрЬ№ясепегргебхСо11ессгоп НтсрВ1ясепегнеопеяс Нтсрчегя1оп НтсрнеЬВеяропяе НстрЬЕясепегнеяропяе Нссрхеьнеопеяс 1РЕпбРогпс 1РАббгеяя 1РЕпброгпГСо11естгоп 1РНояГЕпсгу НетиогХСгебепсга1 Орепнг1теСотр1етебЕчепГАгоя 1гОАЕпбРо1пт ОрепНеабСовр1етебЕчепГАгоя Ргососо1Ч1о1асгопЕхсерс1оп ЯегчгсеРогп.с Бегч1сеРо1пснапаоег ЯоскеГАббгеяя ЯоскеГРеги1яя1опАГГг1Ьпсе ОР1оабпасаСовр1есебЕчепГАгдя БоскеГРепв1яя№оп тгапярогГСопсехс Ор1оабРгодгеяяСЬапдебечепглгда Ор1оабГ11еСопр1етебЕчепГАгдя Ор1оабБГг1пдСоыр1есебЕчепГАгда Ур1оабча1пеяСотр1есебЕчепГАгоя ХеЬЕхсерт1оп ХеЬРегт1яя1оп ХеЬС11епт ХеЬНеабегСо11есс1оп Пространство имен Буя ген.
Нег довольно обширно и состоит из многих членов. Полное их описание и обсуждение всех аспектов программирования для Интернета выходит далеко за рамки этой главы. (На самом деле для подробного рассмотрения всех вопросов, связанных с сетевым подключением к Интернету и его поддержкой в СФ, потребуется отдельная книга.) Однако целесообразно хотя бы перечислить члены пространства имен Б у я сев. Нес, чтобы дать какое-то представление о том, что именно доступно для использования в этом пространстве.
Ниже перечислены классы, определенные в пространстве имен Буягев. Нег. Глава 26. Сетевые средства подключения к Интернету 1013 ХеЬРегтгяя1опАССгТЬпсе ХеЬРгоху ХеЬКес?пеясмеГЬосся саеЬКесгоеяс ХеЬКесгпеяГМеГЬос?я.рср ХеЬКесгпеяСМесЬосГя.р11е ХеЬКеяропяе ХеЬКесгпеяГМеГЬоСя.НГГр ХеЬНГ111су Кроме того, в пространстве имен Яуя сев.
нег определены перечисленные ниже интерфейсы. 1Сгес1епс1а1Ро11су Апснепс1сас1опыооп1е 1сегггйсасеро11су 1ХеЬРгоху 1сгеоепс1а1яВуНояс 1Сгессепс1а1я 1ХеЬРгохуясгйрс 1ХеЬКес?пеяГСгеасе В этом пространстве имен определяются также приведенные ниже перечисления. АпГЬепсдсасдопЯснетея Весотргеяя1опМесЬос1я РсрБГаспяСос?е Нссраеяропяенеаоег НсгрЯСасояСоссе НссрКес?пеяГНеас1ег ЯеспгьсуРгососо1Туре Тгапярогстуре ХетиогКАссеяя ХеЬЕхсерс1опБСаспя Помимо этого, в пространстве имен Буясет. Нес определен ряд делегатов. Несмотря на то что в пространстве имен Я уз Гет.
Нес определено немало членов, лишь немногие из них на самом деле требуются при решении наиболее типичных задач программирования для Интернета. Основу сетевых программных средств составляют абстрактные классы ХеЬКесгпеяс и ХеЬКеяропяе. От этих классов наследуют все классы, поддерживающие конкретные сетевые протоколы. (Протокол определяет правила передачи данных по сети.) Например, к производным классам, поддерживающим стандартный сетевой протокол НТТР, относятся классы Нт СриеЬКессоеяс и НссрнеЬКе яров яе.
Классы НссрнеЬКесгпеаг и НсгрнеЬКеяропяе довольно просты в использовании. Тем не менее решение некоторых задач можно еще больше упростить, применяя подход основанный на классе хеЬС11епс. Так, если требуется только загрузить или вы- ГруЗИтЬ файЛ, тО дЛя ЭтОй ЦЕЛИ ЛУЧШЕ ВСЕГО ПОдОйдЕт КЛаСС ХЕЬС11ЕГсс. Универсальные идентификаторы ресурсов В основу программирования для Интернета положено понятие универсального идентификсгтора ресурса (1Л1), иногда еще называемого унифицированным укюателем информайионного ресурса (1)К1). Этот идентификатор описывает местоположение ресурса в сети. В корпорации М)сгояоа принято пользоваться сокращением 1)й1 при описании членов пространства имен Буясет. Нес, и поэтому в данной книге выбрано именно это сокращение для обозначения универсального идентификатора ресурса.
Идентификаторы 1)рс1, без сомнения, известны каждому, кто хотя бы раз пользовался браузером для поиска информации в Интернете. По существу, это адрес информационного ресурса, который указывается в соответствующем поле окна браузера. Ниже приведена общая форма идентификатора 1Л1: Протокол:/гнявнтификвционкъсй номер сервера/Путь к файлу?Запрос где Протокол — это применяемый протокол, например НТТР; идентификационный номер сервера — конкретный сервер, например тЬрго1еяяйопа1. сот или 1014 Часть!1. Библиотека С№ НегЬЗсЬ11г1Г. сопя путь к файлу — путь к конкретному файлу. Если же Путь к файлу не указан, то получается страница, доступная на указанном сервере по умолчанию.
И наконец, Запрос обозначает информацию, отправляемую на сервер. Указывать Запрос необязательно. В СЗ идентификаторы 1)Е1 инкапсулированы в класс Пгь, рассматриваемый далее в этой главе. Основы организации доступа к Интернету В классах, находящихся в пространстве имен Зуясеп. Нес, поддерживается модель взаимодействия с Интернетом по принципу запроса и ответа. При таком подходе пользовательская программа, являющаяся клиентом, запрашивает информацию у сервера, а затем переходит в состояние ожидания ответа.
Например, в качестве запроса программа может отправить на сервер идентификатор ()Е1 некоторого веб-сайта. В ответ она получит гипертекстовую страницу, соответствующую указанному идентификатору 1)Е(. Такой принцип запроса и ответа удобен и прост в применении, поскольку большинство деталей сетевого взаимодействия реализуются автоматически. На вершине иерархии сетевых классов находятся классы неьнеспеяг и НеЬНеяропяе, реализующие так называемые подключаемые протоколы. Как должно быть известно большинству читателей, для передачи данных в сети применяется несколько разнотипных протоколов. К числу наиболее распространенных в Интернете относятся протокол передачи гипертекстовых файлов (НТТР), а также протокол передачи файлов (РТР). При создании идентификатора 1)Е( его префикс обозначает применяемый сетевой протокол.
Например, в идентификаторе ЬЬ Гр: у у ииь . НегЬЯсЬ11НГ. сов используется префикс Ьггр, обозначающий протокол передачи гипертекстовых файлов (НТТР). Как упоминалось выше, классы ХеЬНеспеяг и ХеЬНеяропяе являются абстрактными, а следовательно, в них определенны в самом общем виде операции запроса и ответа, типичные для всех протоколов. От этих классов наследуют более конкретные производные классы, в которгях реализуются отдельные протоколы. Эти производные классы регистрируются самостоятельно, используя для этой цели статический метод Непфягегггейх (), определенный в классе неЬНеспеят.
При создании объекта типа НеЬНеспеяг автоматически используется протокол, указываемый в префиксе 1)Е1, если, конечно, он доступен. Преимущество такого принципа "подключения" протоколов заключается в том, что большая часть кода пользовательской программы остается без изменения независимо от типа применяемого протокола. В среде выполнения .)х(ЕТ Ецпбте протоколы НТТР, НТТРБ и РТР определяются автоматически. Так, если указать идентификатор 1)Е1 с префиксом НТТР, то будет автоматически получен НТТР-совместимый класс, который поддерживает протокол НТТР. А если указать идентификатор 1)Е1 с префиксом РТР, то будет автоматически получен РТР-совместимый класс, поддерживающий протокол РТР. При сетевом подключении к Интернету чаще всего применяется протокол НТТР, поэтому именно он и рассматривается главным образом в этой главе. (Тем не менее аналогичные приемы распространяются и на все остальные поддерживаемые протоколы.) Протокол НТТР поддерживается в классах НггриеЬНеспеяг и НггрХеЬНеяропяе.
Эти классы наследуют от классов иеьнеспеяг и иеьнеяропяе, а кроме того, имеют собственные дополнительные члены, применимые непосредственно к протоколу НТТР. Глава 26. Сетевые средства подключения к Интернету 1015 Класс Т)ТеЬЕесрзее 1 Класс ИеЬКес)сез с управляет сетевым запросом. Он является абстрактным, поскольку в нем не реализуется конкретный протокол.