C# для чайников
.pdfпараметра, и все они являются строками. Первый параметр — "/ с". Обратите внимание, что он обрабатывается и передается в массив a r g s точно так же, как и все остальные ар гументы. Только сама программа может определить, что именно означает каждый из ар гументов и как он влияет на работу программы.
Передача аргументов из приглашения DOS
Чтобы запустить программу D i s p l a y A r g u m e n t s из приглашения DOS, выполните следующие шаги.
1. Выберите команду Starts Programs^ Accessories^Command Prompt (ПускО Программы ^Стандартные^ Командная строка).
После этого вы должны увидеть на экране черное окно с мигающим курсором ря дом с приглашением С: \ > (приглашение может включать каталог).
2.Перейдите в каталог, содержащий проект DisplayArguments , введя ко манду cd \C #Programs\DisplayArguments\bin\Debug .
(По умолчанию корневой каталог для демонстрационных программ из данной книги — С # P r o g r a m s . Если выбранный вами каталог другой, введите его.)
Приглашение изменится и примет вид С : \ C # P r o g r a m s \ D i s p l a y A r g u m e n t s \ b i n \ D e b u g > .
Если что-то идет не т а к — воспользуйтесь средствами Windows для поиска нужной папки. В Проводнике Windows щелкните правой кнопкой мыши на папке С : \ C # P r o g r a m s и выберите в раскрывающемся меню команду Search (Найти...), как показано на рис. 7.2.
Puc. 7.2. Проводник Windows позволяет легко найти нужную папку на жестком диске
ирование |
Глава 7. Функции функций |
169 |
|
|
В появившемся диалоговом окне введите D i s p l a y A r g u m e n t s . е х е и щелкните кнопке Search (Найти). Найденные имена файлов появятся в правой части диалого вого окна Search Result (Результаты поиска), как показано на рис. 7.3. Проигнор руйте файл D i s p l a y A r g u m e n t s . e x e в каталоге o b j \ D e b u g ; вам нужен файл в каталоге b i n \ D e b u g . Теперь, после того как вы нашли точное расположение файл и его полное имя, вернитесь в консольное окно и перейдите в требуемую папку.
Рис. 7.3. Файл найден; имя соответствующей папки можно найти в правой части диалогового окна
Обычно Visual Studio 2005 размещает выполнимые файлы |
в подкаталоге bin |
D e b u g ; однако это может быть подкаталог b i n \ r e l e a s e |
или любой другой- |
если вы измените конфигурацию Visual Studio. |
|
Windows позволяет использовать в именах файлов и папок пробелы, одна DOS работать с ними не умеет. В версиях Windows до Windows ХР вам мож потребоваться взять имя с пробелами в кавычки. Например, можно перейти каталог с именем My S t u f f с помощью команды наподобие
c d \ " М у S t u f f "
3. В строке приглашения, которая теперь выглядит как С:\C#Programs DisplayArguments\bin\Debug>, введите команду
d i s p l a y a r g u m e n t s / с a r g l a r g 2 .
При этом должна выполниться программа D i s p l a y A r g u m e n t s . ехе, и ее в вод будет таким, как показано на рис. 7.4. Заметим, что на выполнение програ мы не влияет, какими буквами — строчными или прописными — вы набрали имя, а кроме того, вы можете опустить и расширение . е х е .
Передача аргументов из окна
Вы можете запустить программу наподобие D i s p l a y A r g u m e n t s . e x e , введя
имя в командной строке окна Command Prompt (Командная строка). Программу мо
но также запустить и с использованием интерфейса Windows, дважды щелкнув на имени в окне или в Проводнике Windows.
170 |
Часть III. Объектно-основанное программирова |
Рис. 7.4. Выполнение программы DisplayArguments. ехе из при глашения DOS приводит к выводу информации о ее аргументах
Как показано на рис. 7.5, двойной щелчок на имени D i s p l a y A r g u m e n t s приводит к запуску программы без передачи ей аргументов.
Puc. 7.5. В Проводнике Windows вы можете запустить про грамму посредством двойного щелчка на ее имени
Перетаскивание и отпускание одного или нескольких файлов на пиктограмму D i s p l a y A r g u m e n t s . е х е в Проводнике Windows приводит к выполнению программы,
аналогичному вводу в командной строке D i s p l a y A r g u m e n t s имена |
файлов. Одно |
временное перетягивание и отпускание файлов a r g l . t x t и a r g 2 . t x t |
на пиктограмму |
D i s p l a y A r g u m e n t s дает результат, показанный на рис. 7.6. |
|
Для того чтобы перетащить несколько файлов, выберите в списке первый файл, нажмите клавишу <Ctrl> и выберите остальные требующиеся вам файлы, как показано на рис. 7.6. Теперь нажмите кнопку мыши, перетяните все множество файлов и отпустите их на пиктограмму приложения D i s p l a y A r g u m e n t s .
Глава 7. Функции функций |
171 |
Puc. 7.6. Windows позволяет перетащить и отпустить файлы на пик тограмму консольного приложения
Вывод программы D i s p l a y A r g u m e n t s в этом варианте запуска показан на рис. 7.7.
Puc. 7.7. Перетаскивание файлов на пиктограмму приложения дает тот же эффект, что и указание их имен в командной строке
172 |
Часть III. Объектно-основанное программирование |
Обратите внимание, что конкретный порядок передачи файлов приложению при использовании технологии перетаскивания не определен.
Ф у н к ц и я WriteLine ()
Вы могли заметить, что функция WriteLine (), использовавшаяся в рассматривае мых программах, представляет собой не более чем вызов функции класса Console: Console.WriteLine("Это — вызов функции");
Функция WriteLine () — одна из множества предопределенных функций, предос тавляемых библиотекой .NET. Console — предопределенный класс, предназначен ный для использования в консольных приложениях.
Аргументом функции WriteLine (), применявшимся в примерах выше, является строка string. Оператор + позволяет программисту собрать эту строку из несколь ких строк или строк и переменных встроенных типов, например, так:
string s = "Маша"; |
|
|
|
|
Console. WriteLine ("Меня зовут |
" |
+ |
s |
+ |
" и мне " + |
3 |
+ |
" |
года"); |
В результате вы увидите выведенную на экран строку "Меня зовут Маша и мне
Ев'года".
Второй вид функции WriteLine () допускает наличие более гибкого множества ар гументов, например:
Console .WriteLine ("Меня зовут {о} и мне {l} года", "Маша", 3 ) ;
Первый аргумент такого вызова называется форматной строкой. В данном примере строка "Маша" вставляется вместо символов {0} — ноль указывает на первый аргу мент после командной строки. Целое число 3 вставляется в позицию, помеченную как {l}. Этот вид функции более эффективен, поскольку конкатенация строк не так про ста, как это звучит, и не столь эффективна.
Кроме того, в этом варианте в форматной строке может использоваться ряд управляю щих элементов, которые указывают, как именно должны выводиться аргументы функ ции WriteLine (). Вы познакомитесь с ними в главе 9, "Работа со строками в С#".
Передача аргументов в Visual Studio 2005
Для того чтобы запустить программу в Visual Studio 2005, сначала удостоверьтесь, что она собрана без ошибок. Выберите команду меню Builds Build имя программы и убедитесь в отсутствии в окне Output сообщений об ошибках. Корректное сообщение в этом окне должно выглядеть как
Build: 1 succeeded, 0 f a i l e d , 0 s k i p p e d
Если в окне Output вы видите что-то другое — ваша программа не запустится.
Выполнить программу без передачи аргументов — дело одного щелчка. После того как программа успешно собрана, выберите команду меню Debug^Start Debugging (или на жмите клавишу <F5>) или Debug^Start Without Debugging (клавиши <Ctrl+F5>) и полу чите желаемое.
Глава 7. Функции функций |
173 |
По умолчанию Visual Studio выполняет программу, не передавая ей аргументов. Ее: это не то, что вам нужно, вы должны указать Visual Studio, какие аргументы следует редавать. Для этого выполните такие шаги.
1. Откройте окно Solution Explorer, для чего воспользуйтесь командой меш!
V i e w: Solution Explorer.
Окно Solution Explorer содержит описание вашего решения. Решение состоит из одного или нескольких проектов. Каждый проект описывает программу. Напрн мер, проект D i s p l a y A r g u m e n t s гласит, что P r o g r a m . c s — один из файле
вашей программы, и что ваша программа является консольным приложенная Проект также содержит описание других свойств, включая аргументы, испои зуемые при запуске программы D i s p l a y A r g u m e n t s из Visual Studio.
2.Щелкните правой кнопкой мыши на DisplayArguments в Solution Eх plorer и выберите из раскрывающегося меню команду Properties, как пока зано на рис. 7.8.
При этом перед вами появится окно вида, представленного на рис. 7.9, в которой можно указать множество различных настроек вашего проекта — только вот ж лать этого без глубокого понимания, что именно вы настраиваете, ни в коем ели чае не следует.
Puc. 7.8. Обращение к свойствам проекта посредством щелчка правой кноп кой мыши в Solution Explorer
3. На вкладке DisplayArguments выберите в списке вкладок в левой части]
Debug.
4. В поле Command Line Arguments группы Start Options введите аргументы,!
которые вы хотите передать в программу при запуске ее из Visual Studio.
174 |
Часть III. Объектно-основанное программирование |
Puc. 7.9. Введите аргументы программы в поле Command Line Arguments на вкладке Debug
5. Сохраните и закройте окно Properties, а затем выполните программу с помощью команды меню Debug^Start.
Как показано на рис. 7.10, Visual Studio откроет окно DOS с ожидаемым резуль татом выполнения программы.
Puc. 7.10. Передача аргументов консольному приложению в Visual Studio
Глава 7. Функции функций
Единственным отличием между выводом программы из Visual Studio 2005 и из Я мандной строки является отсутствие на экране строки с именем самой программы и si реданными ей аргументами.
176 |
Часть III. Объектно-основанное программирование |
Глава 8
Методы класса
>Передача объекта в функцию
>Преобразование функции класса в метод
>Что такое t h i s
>Генерация документации
осле статических функций, рассматривавшихся в главе 7, "Функции функций", мы перейдем к нестатическим методам класса. Статические функции принад лежат всему классу, в то время как методы — экземплярам класса. Кстати, многие про-
фаммисты предпочитают называть все одним словом -— либо методами, либо функциями, не делая того различия между ними, на которое обращено ваше внимание здесь. Однако имеющееся отличие между статическими и нестатическими функциями очень важно.
Ссылка на объект передается в функцию точно так же, как и переменная, принадле жащая типу-значению, с единственным отличием — объекты всегда передаются в функ цию только по ссылке.
Следующая маленькая программа продемонстрирует, каким образом можно передать объект в функцию:
// P a s s O b j e c t - д е м о н с т р а ц и я п е р е д а ч и о б ъ е к т а в ф у н к ц и ю using S y s t e m ;
namespace P a s s O b j e c t
{
public |
c l a s s |
S t u d e n t |
|
} |
|
|
|
p u b l i c s t r i n g s N a m e ; |
|
||
} |
|
|
|
public |
c l a s s |
P r o g r a m |
|
( |
|
|
|
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 ( ) ;
/ / |
П р и с в а и в а е м и м я п у т е м н е п о с р е д с т в е н н о г о о б р а щ е н и я к |
/ / |
п о л ю о б ъ е к т а |
C o n s o l e . W r i t e L i n e ( " С н а ч а л а : " ) ; s t u d e n t . s N a m e = " M a d e l e i n e " ; 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 e t N a m e ( s t u d e n t , " W i l l a " ) ; 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 ( " Н а ж м и т е < E n t e r > д л я " +
" з а в е р ш е н и я п р о г р а м м ы . . . ") ;
C o n s o l e . R e a d ( ) ;
/ / O u t p u t N a m e p u b l i c s t a t i c
- В ы в о д и м е н и с т у д е н т а
v o i d O u t p u t N a m e ( S t u d e n t 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 . s N a m e |
= { o } " , |
s t u d e n t . s N a m e ) ; |
|
} |
|
/ / S e t N a m e - и з м е н е н и е и м е н и с т у д е н т а |
|
p u b l i c s t a t i c v o i d S e t N a m e ( S t u d e n t |
s t u d e n t , |
s t r i n g |
s N a m e ) |
{ |
|
s t u d e n t . s N a m e = s N a m e ; |
|
} |
|
} |
|
} |
|
Программа создает объект s t u d e n t , в котором не содержится ничего, кроме име~ Она сначала присваивает имя непосредственно и выводит его с помощью функции Out p u t N a m e ( ) .
Затем программа изменяет имя посредством функции S e t N a m e ( ) . Поскольку все объекты в С# передаются в функции по ссылке, изменения, внесенные в объект stud d e n t в функции, остаются и после возврата из нее. Когда функция M a i n () опять вьзы вает функцию для вывода имени студента, последняя выводит измененное имя, что вид но из вывода программы на экран:
С н а ч а л а :
S t u d e n t . s N a m e = M a d e l e i n e П о с л е и з м е н е н и я :
S t u d e n t . s N a m e = W i l l a .
Н а ж м и т е < E n t e r > д л я з а в е р ш е н и я п р о г р а м м ы .
Обратите внимание, что при передаче ссылочного объекта в функцию ключе вое слово r e f не используется. Функция, которой объект передается по ссыл ке, может посредством этой ссылки изменить только содержимое объекта, в не в состоянии присвоить новый объект, как показано в следующем фрагмент исходного текста:
178 |
Часть III. Объектно-основанное программирован |