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

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

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

В появившемся диалоговом окне введите 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. Объектно-основанное программирован

Student

s t u d e n t =

n e w S t u d e n t

( ) ;

 

s t u d e n t . N a m e = " M a d e l e i n e " ;

 

 

OutputName ( s t u d e n t )

;

 

 

Console. W r i t e L i n e ( s t u d e n t . N a m e ) ; / / В с е

е щ е " M a d e l e i n e "

I // И с п р а в л е н н а я ф у н к ц и я O u t p u t N a m e () :

 

public

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 )

}

s t u d e n t = n e w S t u d e n t ( ) ; / / H e п р и в о д и т к и з м е н е н и ю / / о б ъ е к т а s t u d e n t в н е

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

s t u d e n t . N a m e = " P a m " ;

}

Класс представляет собой набор элементов, описывающий объект или концепцию ре­ ального мира. Например, класс V e h i c l e может содержать данные о максимальной ско­ рости, максимальном разрешенном весе, количестве пассажирских мест и т.д. Однако транспортное средство имеет и активные свойства: возможность тронуться с места, ос­ тановиться и т.п. Эти действия можно описать функциями, работающими с данными транспортного средства. Эти функции представляют собой такую же часть класса V e h i ­ cle, как и его члены-данные.

Определение функций - статических членов

Например, вы можете переписать программу из предыдущего раздела не­ много иначе:

// P a s s O b j e c t T o M e m b e r F u n c t i o n - д л я р а б о т ы с п о л я м и о б ъ е к т а / / и с п о л ь з у е т с я с т а т и ч е с к а я ф у н к ц и я - ч л е н

UBing S y s t e m ;

namespace PassObjectMemberToFunction

{

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 ;

 

/ / 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 ,

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

179