Главная » Просмотр файлов » Г. Шилдт - С# 3.0 Полное руководство. 2010

Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 101

Файл №1160798 Г. Шилдт - С# 3.0 Полное руководство. 2010 (Г. Шилдт - С# 3.0 Полное руководство. 2010) 101 страницаГ. Шилдт - С# 3.0 Полное руководство. 2010 (1160798) страница 1012019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 101)

Для открыто сконструи- рованного типа этот список может содержать как аргументы, так и параметры типа. (Более подробно обобщения рассматриваются в главе 18.) Мевьег1пто[] Сетневьегя() Метьоп[1пго(] СеГМетьося О Рторегту1пгс (] СеГРгорегтьея () Получает список членов для заданного типа Получает список методов для заданного типа Получает список свойств для заданного типа Следовательно, тип члена можно определить, проверив свойство МевЬегтуре.

Так, если свойство мевЬегтуре имеет значение мевЬегтурез. мегпсп], то проверяемый член является методом. В класс МевЬег1пТо входят два абстрактных метода: БеГСиятовдстг1Ьигея () и 1я[)е11пеп](). Оба метода связаны с атрибутами. Первый из них получает список специальных атрибутов, имеющих отношение к вызывающему объекту, а второй устанавливает, определен ли атрибут для вызывающего метода.

(Подробнее об атрибутах речь пойдет далее в этой главе.) Класс туре добавляет немало своих собственных методов и свойств к числу тех, что определены в классе МевЬег1пго. В качестве примера ниже перечислен ряд наиболее употребительных методов класса Туре. Глава Ы, Динамическая идентификация типов, рефлексия и атрибуты 626 Далее приведен ряд наиболее употребительных свойств, доступных только для чтения и определенных в классе Туре. Свойство Назначение Ьоо1 тзпепегъсТуре зкг1пч Напезрасе Получает пространство имен для заданного типа Применение рефлексии С помощью методов и свойств класса туре можно получить подробные сведения о типе данных во время выполнения программы. Это довольно эффективное средство. Ведь получив сведения о типе данных, можно сразу же вызвать его конструкторы и методы или воспользоваться его свойствами.

Следовательно, рефлексия позволяет использовать код, который не был доступен во время компиляции. Прикладной интерфейс Ке()ес(!оп АР1 весьма обширен и поэтому не может быть полностью рассмотрен в этой главе. Ведь для этого потребовалась бы целая книга! Но интерфейс Кейест)оп АР1 имеет ясную логическую структуру, а следовательно, уяснив одну его часть, нетрудно понять и все остальное. Принимая во внимание это обстоятельство, в последующих разделах демонстрируются четыре основных способа применения рефлексии; получение сведений о методах, вызов методов, конструирование объектов и загрузка типов данных из сборок.

Получение сведений о методах Имея в своем распоряжении объект класса туре, можно получить список методов, поддерживаемых отдельным типом данных, используя метод пекмеспос)з () . Ниже приведена одна из форм, подходящих для этой цели. Мекпог)тото () Секиетьог)з () Этот метод возвращает массив объектов класса месьог)1пто, которые описывают методы, поддерживаемые вызывающим типом. Класс месьос(1пуо находится в пространстве имен 5узсегл. НеТ1есс1оп. АззеиЬ1у АзвеиЬ1у турейгегъьцеез йтсгъьикез Туре ВазеТуре эсг1по Ги11иапе Ьоо1 тзАЬзкгасС Ьоо1 Тзйггау Ьоо1 тзС1азэ Ьоо1 тзвпае Ьоо1 1эпепег1сгагапекег Получает сборку для заданного типа Получает атрибуты для заданного типа Получает непосредственный базовый тип для заданного типа Получает полное имя заданного типа Истинно, если заданный тип является абстрактным Истинно, если заданный тип является массивом Истинно, если заданный тип является классом Истинно, если заданный тип является перечислением Истинно, если заданный тип является параметром обобщен- ного типа.

(Более подробно обобщения рассматриваются, в главе!8.) Истинно, если заданный тип является обобщенным, (Более подробно обобщения рассматриваются в главе 18.) 526 Часть(. Язык С№ Класс Метпос(1пго является производным от абстрактного класса Меспойиаве, который в свою очередь наследует от класса МещЬег1пго. Это дает возможность пользоваться всеми свойствами и методами, определенными в этих трех классах. Например, для получения имени метода служит свойство нане. Особый интерес вызывают два члена класса Мегнос(1пго: НегпгпТуре и йеСРагащегегв().

Возвращаемый тип метода находится в доступном только для чтения свойстве Негигптуре, которое является объектом класса Туре. Метод бесРагащесегв () возвращает список параметров, связанных с методом. Ниже приведена его общая форма. Рагащегег1сго() яеСРагащегегв(); Сведения о параметрах содержатся в объекте класса Рагащегвг1пго.

В классе Рагащегег1п Ео определено немало свойств и методов, описывающих параметры. Особое значение имеют два свойства: нане — представляет собой строку,'содержащую имя параметра, а РагащесегТуре — описывает тип параметра, который инкапсулирован в объекте класса Туре. В качестве примера ниже приведена программа, в которой рефлексия используется доя получения методов, поддерживаемых классом Мус1авв. В этой программе выводится возвращаемый тип и имя каждого метода, а также имена и типы любых параметров, которые может иметь каждый метод. // Анализ методов с помощью рефлексии.

св1лд Яувсеги св1лс Яувгещ.ке11есг1ол) с1авв МуС1авв ( Тлг х) ълг у; рсь11с МуС1авв(глг 1, ълг №) ( х=).) У=3) ) рсвггс Тес Ясщ() ( гегсгс х+у; ) рсЬ11с Ьоо1 1внегиееп(1лг 1) ( 11(х < 1 ВВ 1 < у) гегсгл Сгсе~ е1ве гессгп га1ве; ) рсвггс то1С Яег(1лг а, Тлг Ь) ( х=а; у-Ь; ) рсЬ11с то1С Яег(носЬ1е а, с(осЬ1е Ь) ( х = (1лг) а; у = (глс) Ь; Глава ]7, Динамическая идентификация типов, рефлексия и атрибуты 627 рпЫ1с чо1б ЯЛом() ( Сопяо1е.игггепапе(" х: (0], у: (1)", х, у); ) с1аяя Вег1есгоещо ( ягагас чо16 Ма1п() ( туре г = гуреот(муС1аяя); // получить объект класса // Туре, представлякщий класс МуС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пг32 Япщ() Воо1еап 1яВегнееп(1пг32 1) чола Яег(1пг32 а, 1пг32 Ы чокд Бег(Оопые а, Оопые ь) чокб Япои() 528 Часть [. Язык,СФ Згг1по Тоэггьпб() Воо1еап ЕЧоа1з (ОЬэесг оЬ11 тпС32 бегиазвсобе() туре бегтуре() Как видите, помимо методов, определенных в классе МуС1азз, в данной программе выводятся также методы,'определенные в классе оЬ1есС, поскольку все типы данных в С№ наследуют от класса оЬ1есС.

Кроме того, в качестве имен типов указываются имена структуры .НЕТ. Обратите также внимание на то, что метод Вес () выводится дважды, поскольку он перегружается. Один из его вариантов принимает аргументы типа Ьпг, а другой — аргументы типа бопЬ1е. Рассмотрим эту программу более подробно.

Прежде всего следует заметить, что в классе МуС1а аз определен открытый конструктор и ряд открытых методов, в том числе и перегружаемый метод БеС () . Объект класса туре, представляющий класс МуС1азз, получается в методе Мабп () в следующей строке кода: туре с = суреог(мус1азз)! // получить объект класса // Туре, представляющий класс МТС1азз Напомним, что оператор суреог возвращает объект класса туре, представляющий конкретный тип данных [в данном случае — класс МуС1азз).

С помощью переменной С и прикладного интерфейса Ве11есС1оп ВР1 в данной программе затем выводятся сведения о методах, поддерживаемых в классе МуС1азз. Для этого в приведенной ниже строке кода сначала получается список соответствующих методов. Мегьобгпко[) вь = С.бегнегвобз()т Затем в цикле гогеасЬ организуется обращение к элементам массива вг.

На каждом шаге этого цикла выводится возвращаемый тип, имя и параметры отдельного метода, как показано в приведенном ниже фрагменте кода. Йогеаов(иегьобтпго в 1п в1) ( // Вывести возвращаемый тип и имя каждого метода. Сопзо1е.игъге(" " + в.вегпгпТуре.паве + " " + в.паве т "(")т // Вывести параметры. РагавеСегтпсо[.) р1 = в.беСРагавегега()т Гог(1пг 1=0) 1 < РТ.Ьепдгвт 1++) ( Сопзо1е.иг1Се(рг[1!.РагавегегТуре.паве + " " + ръ[1).паве)т 11(1+1 < рб.ьепдСЬ) Сопео1е.игвге(", ")т ) В этом фрагменте кода параметры, связанные с каждым методом, сначала получаются с помощью метода беграгавегегз () и сохраняются в массиве р1. Затем в цикле аког происходит обращение к элементам массива рг и выводится тип и имя каждого параметра.

Самое главное, что все эти сведения получаются динамически во время выполнения программы, не опираясь на предварительную осведомленность о классе МуС1азз. Глава 17. Динамическая идентификация типов, рефлексия и атрибуты 529 В этом варианте получаются только те методы, которые соответствуют указанным критериям. Въпбупдр1адя представляет собой перечисление. Ниже перечислен ряд наиболее употребительных его значений.

Описание Значение Оес1агебол1у Извлекаются только те методы, которые определены в заданном классе. Унаследованные методы в извлекаемые сведения не включаются 1пягапсе НопРнЫ1с РоЫ1с зсасас Извлекаются методы экземпляра Извлекаются методы, не являющиеся открытыми Извлекаются открытые методы Извлекаются статические методы Два или более флажка можно объединить с помощью логической операции ИЛИ.

Характеристики

Тип файла
DJVU-файл
Размер
6,78 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Г. Шилдт - С# 3.0 Полное руководство
C_sharp_3TCR_code
Apndx.lst
Chap2.lst
Chap3.lst
Chap4.lst
Chap5.lst
Chap6.lst
Chap7.lst
Chap8.lst
Chap9.lst
Chap10.lst
Chap11.lst
Chap12.lst
Chap13.lst
Chap14.lst
Chap15.lst
Chap16.lst
Chap17.lst
Chap18.lst
Chap19.lst
Chap20.lst
Chap21.lst
Chap22.lst
Chap23.lst
Chap24.lst
Chap25.lst
Chap26.lst
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6472
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее