Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Books / 3_C#_2005_для_чайников_(Дэвис-2008)

.pdf
Скачиваний:
86
Добавлен:
24.03.2015
Размер:
15.46 Mб
Скачать

просто выводит строку на консоль. Функция O u t p u t N a m e () получает в качестве арг мента объект класса S t u d e n t , так что она может получить и вывести имя студента.

Далее функция M a i n ( ) использует для решения той же задачи функцию объект и вызывает s t u d e n t . O u t p u t B a n n e r A n d N a m e ( ) .

Метод s t u d e n t . O u t p u t B a n n e r A n d N a m e () сначала вызывает статическую функ цию O u t p u t B a n n e r ( ) . При этом вызове, поскольку не указан класс, к которому принад лежит функция, подразумевается, что она принадлежит тому же классу, что и вызывание функция, т.е. классу S t u d e n t . После этого выполняется вызов O u t p u t N a m e ( ) . Это то же функция класса, и точно так же устанавливается ее принадлежность классу S t u d Однако эта функция требует передачи ей объекта класса S t u d e n t . Метод stu d e n t . O u t p u t B a n n e r A n d N a m e () передает ей в качестве этого аргумента t h i s .

Более интересная ситуация возникает при вызове T o N a m e S t r i n g () из Output N a m e ( ) . Функция O u t p u t N a m e () объявлена как s t a t i c и, таким образом, не имеет t h i s . У нее есть переданный ей объект класса S t u d e n t , который она и использует для осуществления вызова.

Статическая функция не может вызывать нестатические методы без явного ука зания объекта. Нет объекта — нет и вызова. В общем случае статическая функ ция не может обратиться ни к одному нестатическому элементу класса. Однако нестатические методы могут обращаться как к статическим, так и к нестатич ским членам класса — данным и функциям.

В среде Visual Studio программисту доступна одна важная возможность, известные как автозавершение (auto-complete). Когда вы вводите имя класса или объекта в вашем исходном тексте, Visual Studio пытается предвидеть, какое имя класса или метода вы на мерены ввести.

Описать автозавершение в Visual Studio проще на конкретном примере. Для демонст рации того, как работает эта возможность Visual Studio, представлен следующий фраг мент исходного текста из программы M i x i n g F u n c t i o n s A n d M e t h o d s :

/ / В ы в о д з а г о л о в к а и и м е н и S t u d e n t . O u t p u t B a n n e r ( ) ;

S t u d e n t . O u t p u t N a m e ( s t u d e n t ) ; C o n s o l e . W r i t e L i n e ( ) ;

/ / П о в т о р н ы й в ы в о д з а г о л о в к а и и м е н и s t u d e n t . O u t p u t B a n n e r A n d N a m e ( ) ;

Автозавершение— удобная вещь, но если вам требуется большая помощь, их пользуйтесь командой Help^Index для вызова справки. Выводимый предметны, указатель можно ограничить, например, только темами, связанными с С# или .NET Воспользуйтесь этим предметным указателем так же, как вы пользуетесь предмет ным указателем книги. К вашим услугам также команды поиска по текстам стате справки и содержания справочной системы. Нужные вам статьи можно пометил с тем, чтобы в будущем можно было быстро к ним возвращаться.

190

Часть III. Объектно-основанное программирован® Г.

Справка по встроенным функциям системной библиотеки

При использовании фрагмента программы M i x i n g F u n c t i o n s A n d M e t h o d s в каче­ стве примера, как только вы вводите в редакторе C o n s o l e . , Visual Studio сразу же вы­ водит список всех методов C o n s o l e . Стоит ввести W, как Visual Studio переходит в спи­ ске к первому методу, начинающемуся на W (а именно — W r i t e ()) . Если вы нажмете клавишу <1>, то перейдете к методу W r i t e L i n e ( ) , а справа от списка появится справ­ ка по этому методу (рис. 8.1). В справке, в частности, указано, что имеется 19 перегру­ женных версий данного метода — естественно, каждая со своим набором аргументов.

Рис. 8.1. Автозавершение в Visual Studio позволяет правильно выбрать требуемый метод

Вы завершаете ввод имени W r i t e L i n e . Как только вы введете после имени откры­ вающую скобку, Visual Studio изменит выводимое окно подсказки — теперь в нем будут показаны возможные аргументы функции (рис. 8.2).

Puc. 8.2. Visual Studio подсказывает, какие возможные аргументы может прини­ мать функция

Не нужно полностью вводить имя функции. Предположим, вы ввели W r i t e L , чего вполне достаточно, чтобы однозначно идентифицировать нужный вам ме­ тод. Не завершая ввода имени, введите открывающую скобку, и Visual Studio завершит ввод имени метода за вас. Вы можете также воспользоваться клави­ шами <Ctrl+Space> для появления раскрывающегося меню автозавершения.

Глава 8. Методы класса

191

Справка по встроенным функциям системной библиотеки

При использовании фрагмента программы M i x i n g F u n c t i o n s A n d M e t h o d s в каче­ стве примера, как только вы вводите в редакторе C o n s o l e ., Visual Studio сразу же вы­ водит список всех методов C o n s o l e . Стоит ввести W, как Visual Studio переходит в спи­ ске к первому методу, начинающемуся на W (а именно — W r i t e ()) . Если вы нажмете клавишу <1>, то перейдете к методу W r i t e L i n e ( ) , а справа от списка появится справ­ ка по этому методу (рис. 8.1). В справке, в частности, указано, что имеется 19 перегру­ женных версий данного метода — естественно, каждая со своим набором аргументов.

Рис. 8.1. Автозавершение в Visual Studio позволяет правильно выбрать требуемый метод

Вы завершаете ввод имени W r i t e L i n e . Как только вы введете после имени открывающую скобку, Visual Studio изменит выводимое окно подсказки — теперь в нем будут показаны возможные аргументы функции (рис. 8.2).

Puc. 8.2. Visual Studio подсказывает, какие возможные аргументы может прини­ мать функция

Не нужно полностью вводить имя функции. Предположим, вы ввели W r i t e L , чего вполне достаточно, чтобы однозначно идентифицировать нужный вам ме­ тод. Не завершая ввода имени, введите открывающую скобку, и Visual Studio завершит ввод имени метода за вас. Вы можете также воспользоваться клави­ шами <Ctrl+Space> для появления раскрывающегося меню автозавершения.

Л'АВА 8. Методы класса

191

Можно щелкнуть мышью в левой части всплывающего окна справки для и чтобы найти интересующую версию перегрузки функции W r i t e L i n e (). описанием функции вы увидите описание ее первого аргумента (если такой имеется). Функция W r i t e L i n e () имеет 19 вариантов перегрузки для разн ных типов данных. Первый из них, который вы увидите во всплывающем он не требует аргументов. Посредством клавиш можнопрокручивать список перегрузок.

Если воспользоваться версией W r i t e L i n e , которая в качестве первого аргумент получает форматную строку, то как только будет введена строка, например " s o m e s t r i n g { 0 } " (использована сугубо в качестве примера), за которой вводится запятая, как Visual Studio тут же ответит на эти действия описанием второго аргумент функции, как показано на рис. 8.3.

Рис. 8.3. Visual Studio предоставляет информацию no каждому аргументу функции

Помощь при использовании ваших собственных функций и методов

Visual Studio в состоянии помочь и при работе с собственными функциями (часта помнить их и все их аргументы не менее сложно, чем для функций из .NET).

Продолжим анализируемый пример. Удалим строку " s o m e s t r i n g {о}" и за ним вызов метода вызовом без аргументов: C o n s o l e . W r i t e L i n e О. В следуют строке введем s t u d e n t . Как только будет введена точка после имени объекта, Vis Studio откроет список членов объекта класса S t u d e n t . Если продолжить ввод и ввести первую букву имени члена, Visual Studio тут же перейдет в списке к первому члену с кой буквой, как показано на рис. 8.4. Будет также показано и объявление метода, что вы могли вспомнить, как им пользоваться.

По пиктограмме слева от имени в списке автозавершения можно узнать, имеете ли дело с членами-данными или с методами.

Гораздо проще определить это по цвету: члены-данные имеют цвет морс волны, а методы — розовый.

192

Часть III. Объектно-основанное программирова

Рис. 8.4. Автозавершение в Visual Studio может работать и с пользовательскими классами и методами

Вы можете встретиться с неизвестными вам методами, такими как Equals или GetHashCode. Эти методы все без исключения объекты получают от С# (совершенно бесплатно) для технических целей.

Повторимся — ввод открывающей скобки позволяет Visual Studio автоматиче­ ски завершить ввод имени метода.

Та же возможность автозавершения работает и с функциями. Если вы введете имя класса Student, за которым следует точка, Visual Studio откроет список членов этого класса. Как только вы введете OutputN, Visual Studio отреагирует на это списком аргу­ ментов функции OutputName ( ) , как показано на рис. 8.5.

Puc. 8.5. Visual Studio обеспечивает вас информацией независимо от того, работаете вы с методами объекта или функциями класса

Внесение дополнений в справочную систему

Функция автозавершения Visual Studio существенно облегчает работу программиста, однако, к огромному сожалению, когда дело касается пользовательских классов или функций, ее возможности оказываются весьма ограниченными.

Visual Studio в состоянии предоставить только ограниченную справочную информа­ цию по пользовательским классам и функциям. Например, Visual Studio не знает о том,

Глава 8. Методы класса

193

что делает функция O u t p u t N a m e ( ) , и не

может предоставить

программисту какой

либо описывающий ее текст. Но этой беде можно помочь — было бы желание.

Обычные комментарии в С# начинаются с двух косых черт — / /. Но Visual Stud

выделяет и понимает специальные комментарии, начинающиеся

с трех косых черт-

/ / / . Э т о — документирующие комментарии,

снабжающие Visual

Studio дополнител

ной информацией, которая может использоваться функцией автозавершения.

Если быть точным, то впервые такая концепция появилась в языке Java, в кок ром имелись специальные программы для сбора подобных комментариев в от дельный файл справки. С# пошел несколько дальше и использует эти комма тарии в своей динамической справочной системе, работающей в процессе ре дактирования исходных текстов.

Документирующие комментарии могут содержать любую комбинацию элементом показанных в табл. 8.1.

Документирующие комментарии следуют правилам XML7HTML: команда начин» ется с дескриптора < c o m m a n d > и заканчивается дескриптором </command Это — обычные дескрипторы XML.

В документирующих комментариях могут применяться самые разные дескриптора Чтобы узнать о них больше, воспользуйтесь командой меню Help^lndex и обратитесь разделу "XML documentation features [С#]".

Вот как выглядит пример откомментированной версии программы Mixing F u n c t i o n s A n d M e t h o d s :

// M i x i n g F u n c t i o n s A n d M e t h o d s W i t h X M L T a g s - - совмещение

// функций класса и методов объектов может привести к // проблемам

u s i n g S y s t e m ;

n a m e s p a c e M i x i n g F u n c t i o n s A n d M e t h o d s

{

/ / / < s u m m a r y >

/ / / Простое

описание студента

/ / / < / s u m m a r y >

p u b l i c c l a s s

S t u d e n t

{

 

// / < s u m m a r y >

// / Имя студента

194

Часть III. Объектно-основанное программировании

/ // < / s u m m a r y >

p u b l i c s t r i n g s F i r s t N a m e ;

///< s u m m a r y >

///

Ф а м и л и я

с т у д е н т а

///

< / s u m m a r y >

p u b l i c s t r i n g

s L a s t N a m e ;

/ / I n i t S t u d e n t

// / < s u m m a r y >

/// И н и ц и а л и з а ц и я с т у д е н т а п е р е д е г о и с п о л ь з о в а н и е м .

/// < / s u m m a r y >

// / < p a r a m n a m e = " s F i r s t N a m e " > И м я с т у д е н т а < / р а г а т >

// / < p a r a m n a m e = " s L a s t N a m e " > Ф а м и л и я с т у д е н т а < / р а г а т >

p u b l i c v o i d I n i t S t u d e n t ( s t r i n g

s F i r s t N a m e ,

s t r i n g

s L a s t N a m e )

{'

 

t h i s . s F i r s t N a m e = s F i r s t N a m e ;

 

t h i s . s L a s t N a m e = s L a s t N a m e ;

 

/ / O u t p u t B a n n e r

///< s u m m a r y >

/// Вывод з а г о л о в к а п е р е д в ы в о д о м и н ф о р м а ц и и о с т у д е н т е

///< / s u m m a r y >

p u b l i c s t a t i c v o i d O u t p u t B a n n e r ( )

{

C o n s o l e . W r i t e L i n e ( " Н и к а к и х х и т р о с т е й : " ) ;

/ / C o n s o l e . W r i t e L i n e ( ? к а к о й о б ъ е к т и с п о л ь з у е т с я ? ) ;

}

/ / O u t p u t B a n n e r A n d N a m e

///< s u m m a r y >

/// Вывод з а г о л о в к а с п о с л е д у ю щ и м в ы в о д о м и м е н и с т у д е н т а

///< / s u m m a r y >

p u b l i c v o i d O u t p u t B a n n e r A n d N a m e ( )

{

/ / И с п о л ь з у е т с я к л а с с S t u d e n t , н о с т а т и ч е с к о м у м е т о д у / / н е п е р е д а ю т с я н и к а к и е о б ъ е к т ы

O u t p u t B a n n e r ( ) ;

/ / Я в н а я п е р е д а ч а о б ъ е к т а O u t p u t N a m e ( t h i s , 5 ) ;

// O u t p u t N a m e

///< s u m m a r y >

/// В ы в о д и т и м я с т у д е н т а н а к о н с о л ь

///< / s u m m a r y >

///

< p a r a m

n a m e = " s t u d e n t " > С т у д е н т ,

и м я

к о т о р о г о д о л ж н о

///

 

б ы т ь в ы в е д е н о < / р а г а т >

///

< p a r a m

n a m e = " n I n d e n t " > K ^ H 4 e c T B O п р о б е л о в в

///

 

о т с т у п е < / р а г а т >

///

< r e t u r n s > B b m e f l e H H a f l c T p o K a < / r e t u r n s >

p u b l i c s t a t i c s t r i n g O u t p u t N a m e ( S t u d e n t

s t u d e n t ,

 

 

i n t

n l n d e n t )

{•

/ / З д е с ь о б ъ е к т у к а з а н я в н о

s t r i n g s = n e w S t r i n g ( ' ' , n l n d e n t ) ;

s + = S t r i n g . F o r m a t ( " И м я с т у д е н т а - { О } " ,

s t u d e n t . T o N a m e S t r i n g ( ) ) ; C o n s o l e . W r i t e L i n e ( s ) ;

r e t u r n s ;

}

// T o N a m e S t r i n g

// / < s u m m a r y >

/ / / П р е о б р а з у е т и м я с т у д е н т а в с т р о к у д л я в ы в о д а

/ / /

< / s u m m a r y >

/ / /

< r e t u r n s > C T p o K y с и м е н е м с т у д е н т а < / r e t u r n s >

p u b l i c s t r i n g T o N a m e S t r i n g ( )

{

/ / З д е с ь т е к у щ и й о б ъ е к т у к а з а н н е я в н о ; м о ж н о / / и с п о л ь з о в а т ь t h i s :

/ / r e t u r n t h i s . s F i r s t N a m e + " " + t h i s . s L a s t N a m e ; r e t u r n s F i r s t N a m e + " " + s L a s t N a m e ;

}

}

/ / / < s u m m a r y >

/ / / К л а с с , и с п о л ь з у ю щ и й к л а с с S t u d e n t

/ / / < / s u m m a r y >

p u b l i c c l a s s P r o g r a m

{

/ / / < s u m m a r y >

/ / / С т а р т о в а я т о ч к а п р о г р а м м ы .

/ / /

< / s u m m a r y >

/ / /

< p a r a m n a m e = " a r g s 1 1 > А р г у м е н т ы к о м а н д н о й

/ / /

с т р о к и < / р а г а т >

p u b l i c

s t a t i c v o i d M a i n ( s t r i n g [ ]

a r g s )

{

S t u d e n t s t u d e n t = n e w S t u d e n t ( ) ;

s t u d e n t . I n i t S t u d e n t ( " M a d e l e i n e " , " C a t h e r " ) ;

/ / В ы в о д з а г о л о в к а и и м е н и S t u d e n t . O u t p u t B a n n e r ( ) ;

s t r i n g s = S t u d e n t . O u t p u t N a m e ( s t u d e n t , 5 ) ; C o n s o l e . W r i t e L i n e ( ) ;

/ / В ы в о д з а г о л о в к а и и м е н и е щ е р а з s t u d e n t . O u t p u t B a n n e r A n d N a m e ( ) ;

/ / О ж и д а е м п о д т в е р ж д е н и я п о л ь з о в а т е л я

C o n s o l e . W r i t e L i n e ( " Н а ж м и т е < E n t e r > д л я " +

" з а в е р ш е н и я п р о г р а м м ы . . . " ) ;

C o n s o l e . R e a d ( ) ;

}

}

}

Комментарии непосредственно предшествуют описываемой ими функции. Они пояс­ няют предназначение ее и каждого из ее аргументов, тип возвращаемых данных и ссыл­

196

Часть III. Объектно-основанное программирование

ки на связанные функции. Вот что происходит на практике при добавлении вызова S t u ­ dent . O u t p u t N a m e () в функцию M a i n ( ) .

1. Visual Studio предлагает список функций. После того как вы выберете O u t p u t - N a me (), Visual Studio выводит краткое описание из раздела < s u m m a r y >

</summsiry>, как показано на рис. 8.6. Текст появляется чуть ниже функции в желтом окне автозавершения.

2. После того как вы выберете функцию или введете ее имя, Visual Studio выводит описание первого параметра, которое получает из раздела < p a r a m x / p a r a m > . Это описание появляется на том же месте, что и предыдущее, замещая собой опи­ сание функции.

3. Затем Visual Studio повторяет процесс для второго аргумента, n l n d e n t .

Рис. 8.6. Visual Studio может описывать пользовательские функции и их аргументы с применением XML

Конечно, вводить такого рода комментарии — занятие скучное, но зато потом ваша работа по использованию своих же классов и методов существенно облегчится.

Visual Studio можно настроить так, чтобы документирующие комментарии не отображались на экране.

Генерация XML-документации

Можно легко заставить Visual Studio вывести всю документацию в виде XML-файла.

Все, сказанное в данном разделе, — специфическая техническая информация. Если вы не знаете, что такое XML-файл, можно просто пропустить этот раздел, не читая.

Для генерации XML-документации выполните следующие шаги.

1.Выберите команду меню Project^Имя проекта Properties.

2.В разделе Build прокрутите раздел Output и найдите свойство под названи­

ем XML Documentation File. Отметьте соответствующий флаг и введите имя файла.

3. Сохраните и закройте вкладку Properties.

Глава 8. Методы класса

197

К свойствам проекта можно обратиться, щелкнув правой кнопкой мыши

имени проекта в Solution Explorer.

4.Теперь выберите команду меню Build: Rebuild Solution для полной сбор проекта, независимо от того, требуется она или нет.

5.Просмотрите подкаталог bin\Debug проекта MixingFunctionsAndMet odsWithXMLTags (или другой подкаталог, который был указан вами д XML-документации).

В этом подкаталоге должен находиться файл с указанным вами в п. 2 имена в котором содержится описание всех функций, документированных посредством XML-дескрипторов.

198

Часть III. Объектно-основанное программирована