1629295403-b876e2087bddebea4bc9666fb2377a02 (846199), страница 31
Текст из файла (страница 31)
. . ") ;C o n s o l e . R e a d () ,-classExample{publicvoidTestString(stringsTest){////if{Проверка,не нулевойбыть п е р в о й ! )(sTest == n u l l )лиConsole.WriteLine("sTestreturn;объект==(этапроверкадолжнаn u l l " ) ;}////////Мы знаем,что s T e s t не указывает на нулевой объект,но в с е еще может у к а з ы в а т ь на пустую с т р о к у .Проверяем,не указывает ли s T e s t на нулевую(пустую)строкуif(String.Compare(sTest,{11Console . WriteLine (return;Глава 7.
Функции функцийsTest"")-==0)ссылканапустуюстроку");165{}}// Строка не пустая, выводим ее} Console.WriteLine("sTest указывает на:'"+sTest +" ' " ) ;Функция T e s t S t r i n g O использует сравнение s T e s t = = n u l l для проверки, не нанулевой ли объект указывает ссылка. Для проверки, не указывает ли ссылка на пустуюстроку, функция T e s t S t r i n g () использует функцию C o m p a r e () (функция Comp a r e () возвращает 0, если переданные ей строки равны. В главе 9, "Работа со строками в С # " , вы более детально познакомитесь со сравнением строк).Вот как выглядит вывод этой программы на экран:Эта программа и с с л е д у е т функцию T e s t S t r i n g OПередача нулевого объекта:sTest == n u l lПередача пустой строки:s T e s t - ссылка на пустую с т р о к уПередача реальной строки:sTest указывает на:'test string'Нажмите < E n t e r > д л я з а в е р ш е н и я п р о г р а м м ы .
. .Определение функции без возвращаемого значенияВыражение p u b l i c s t a t i c d o u b l e A v e r a g e О объявляет функцию A v e r a g e dкак возвращающую значение типа d o u b l e . Однако бывают функции, не возвращающиеничего. Ранее вы сталкивались с примером такой ф у н к ц и и — A v e r a g e A n d D i s p l a y О,которая выводила вычисленное среднее значение на экран, ничего не возвращая вызывающей функции. Вместо того чтобы опустить в объявлении такой функции тип возвращаемого значения, в С# указывается v o i d :publicvoidAverageAndDisplay(double,double)Ключевое слово v o i d , употребленное вместо имени типа, по сути, означает отсутствие типа, т.е. указывает, что функция A v e r a g e A n d D i s p l a y () ничего не возвращает вызывающей функции.
(В С# любое объявление функции обязано указывать возвращаемый тип, даже если это v o i d . )Функция, которая не возвращает значения, программистами называется voidфункцией, по использованному ключевому слову в ее описании.Функции, не являющиеся v o i d - ф у н к ц и я м и , возвращают управление вызывающейфункции при выполнении оператора r e t u r n , за которым следует возвращаемое вызывающей функции значение. Поскольку v o i d - ф у н к ц и я не возвращает никакого значения, выход из нее осуществляется посредством оператора r e t u r n без какого бы то нибыло значения либо (по умолчанию) при достижении закрывающей тело функции фигурной скобки.Рассмотрим следующую функцию D i s p l a y R a t i o ( ) :publicclassExample{166Часть III.
Объектно-основанное программированиеpublic{//ifstaticvoidDisplayRatio(doubledoubleЕсли знаменатель( d D e n o m i n a t o r ==равен0.0)dNumerator,dDenominator)0...{// . . . в ы в е с т и сообщение об ошибке и в е р н у т ь// у п р а в л е н и е вызывающей функции . . .C o n s o l e . W r i t e L i n e ( " З н а м е н а т е л ь не может быть// Выход из функцииreturn;нулем");}// Эта ч а с т ь функции в ы п о л н я е т с я т о л ь к о в том с л у ч а е ,// к о г д а з н а м е н а т е л ь не р а в е н нулюdouble dRatio = dNumerator / dDenominator;Console.WriteLine("Отношение " + dNumerator+ " к " + dDenominator+ " равно " + d R a t i o ) ;} // Если з н а м е н а т е л ь не р а в е н нулю, выход из функции}// в ы п о л н я е т с я з д е с ьФункция D i s p l a y R a t i o () начинает работу с проверки, не равно ли значение d D e n o m i n a t o r нулю.Если значение d D e n o m i n a t o r равно нулю, программа выводит сообщение обошибке и возвращает управление вызывающей функции, не пытаясь вычислитьзначение отношения.
При попытке вычислить отношение произошла бы ошибкацеления на 0 с аварийным остановом программы в результате.Если значение d D e n o m i n a t o r не равно нулю, программа выводит на экран значениеотношения. При этом закрывающая фигурная скобка после вызова функции W r i t e L i n e () является закрывающей скобкой функции D i s p l a y R a t i o () и, таким образом, представляет собой точку возврата из функции в вызывающую программу.Взгляните на любое консольное приложение в этой книге.
Выполнение программывсегда начинается с функции M a i n ( ) . Рассмотрим аргументы в следующем объявлениифункции M a i n ( ) :publicstaticvoidMain ( s t r i n g []args){//}...Исходный т е к с т программы...Функция M a i n () — статическая функция класса P r o g r a m , определенная Visual Studio AppWizard. Она не возвращает значения и принимает в качестве аргументов массивобъектов типа s t r i n g .
Что же это за строки?Для запуска консольного приложения пользователь вводит имя программы в командной строке. При необходимости он может ввести в этой же строке после имени программы дополнительные аргументы. Вы видели это при использовании команд наподобиеcopy m y F i l e С : \ m y D i r , копирующей файл m y F i l e в каталог С : \ m y D i r .Глава 7. Функции функций167Как показано в приведенной далее демонстрационной программе D i s p l a yA r g u m e n t s , массив объектов s t r i n g , передаваемый в качестве параметрав функцию M a i n ( ) , и представляет собой аргументы текущего вызова программы.//DisplayArgumentsusing-выводаргументов,переданныхпрограммеSystem;namespaceDisplayArguments{class{Testpublic// Класс,содержащий функцию// называться Programs t a t i cvoidMain(string[]Main(),необязанargs){//Количество аргументовC o n s o l e .
W r i t e L i n e ( " У программыargs.Length);// Это а р г у м е н т ы :i n t nCount = 0;foreach(stringargin{0}аргументов",args){Console.WriteLine("АргументnCount++,{о}arg);{l}",}/ / Ожидаем п о д т в е р ж д е н и я п о л ь з о в а т е л яConsole.WriteLine("Нажмите <Enter> для " +"завершения программы...");}}Console.Read();r e t u r n 0;////////Другие программы,запущенные вконсольном окне,могут проверитьвозвращаемое значение;ненулевоез н а ч е н и е обычно о з н а ч а е т ошибкуэтоОбратите внимание, что функция M a i n ( ) может возвращать значение несмотря 4то, что она объявлена как v o i d , как и везде в настоящей книге. Однако она непременнодолжна быть объявлена как s t a t i c .Программа начинает свою работу с вывода длины массива a r g s . Это значение соответствует количеству аргументов, переданных функции.
Затем программа циклически|проходит по всем элементам массива a r g s , выводя каждый его элемент на экран.Ниже приведен пример вывода данной программы (в первой строке показан вид ко]мандной строки, введенной при запуске программы):DisplayArguments/сarglarg2У программы 3 аргументовАргумент 0 /сАргумент 1- arglАргумент 2- arg2Нажмите<Enter>длязавершенияпрограммы...Как видите, имя самой программы в список аргументов не входит (для того чтобыдинамически выяснить имя программы, имеется другая функция). Пользователь ввел тра168Часть III. Объектно-основанное программирова,параметра, и все они являются строками. Первый параметр — "/ с " . Обратите внимание,что он обрабатывается и передается в массив a r g s точно так же, как и все остальные аргументы. Только сама программа может определить, что именно означает каждый из аргументов и как он влияет на работу программы.Передача аргументов из приглашения DOSЧтобы запустить программу D i s p l a y A r g u m e n t s из приглашения DOS, выполнитеследующие шаги.1.
ВыберитекомандуS t a r t s P r o g r a m s ^ A c c e s s o r i e s ^ C o m m a n d Prompt(ПускО П р о г р а м м ы ^ С т а н д а р т н ы е ^ К о м а н д н а я строка).После этого вы должны увидеть на экране черное окно с мигающим курсором рядом с приглашением С: \ > (приглашение может включать каталог).2. Перейдите в каталог, содержащий проект D i s p l a y A r g u m e n t s , введя команду 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 \bin\Debug>.Если что-то идет не т а к — воспользуйтесь средствами 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 размещает выполнимые файлы в подкаталоге binD 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 с помощью команды наподобиеcd\"МуStuff"3. В строке приглашения, которая теперь выглядит как С:\C#ProgramsDisplayArguments\bin\Debug>, введите командуdisplayarguments/сarglarg2.При этом должна выполниться программа 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 (Командная строка).