1629295403-b876e2087bddebea4bc9666fb2377a02 (846199), страница 12
Текст из файла (страница 12)
В С#этот фокус не проходит.Переменная типа b o o l объявляется следующим образом:bool t h i s I s A B o o l= true;Нет никаких путей для преобразования переменных b o o l в другой тип переменных(даже если бы вы могли это делать, это бы не имело никакого смысла). В частности, выГлава 3. Объявление переменных-значений65не можете преобразовать b o o l в i n t (чтобы, скажем, f a l s e превратилось в 0) илив s t r i n g (чтобы f a l s e стало " f a l s e " ) .Программа, которая в состоянии заниматься только вычислениями, могла бы устроитьразве что математиков, страховых агентов и военных ( д а - д а — первые вычислительныемашины были созданы для расчета таблиц артиллерийских стрельб). Однако в большинстве приложений программы должны работать не только с цифрами, но и с буквами.С# рассматривает буквы двумя различными путями — как отдельные символы типаc h a r и как строки символов типа s t r i n g .Т и п charПеременная типа c h a r способна хранить только один символ.
Символьная константавыглядит как символ, окруженный парой одинарных кавычек:char с=' а' ;Вы можете хранить любой символ из латинского алфавита, кириллицы, арабского,иврита, японских катаканы и хираганы и массы японских, китайских или корейских иероглифов.Кроме того, тип c h a r может использоваться в качестве счетчика, т.е. его можноприменять в циклах, о которых вы узнаете в главе 5, "Управление потоком выполнения".У символов нет никаких проблем, связанных с округлением.Переменные типа c h a r не включают информации о шрифтах, так что в переменной c h a r может храниться, например, вполне корректный иероглиф, нопри выводе его без использования соответствующего шрифта вы увидите наэкране только мусор.Специальные символыНекоторые символы являются непечатными в том смысле, что вы ничего не увидитепри выводе их на экран или на принтер.
Наиболее очевидным примером такого символа1является пробел '(кавычка, пробел, кавычка). Другие символы не имеют буквенногоэквивалента — например, символ табуляции. Для указания таких символов С# использует обратную косую черту, как показано в табл. 3.3.66Часть II. Основы программирования в С#Тип stringЕще одним распространенным типом переменных является s t r i n g . Приведенные далее примеры показывают, как объявляются и инициализируются переменные этого типа.// Объявление с о т л о ж е н н о й и н и ц и а л и з а ц и е йstring s o m e S t r i n g l ;someStringl = " Э т о с т р о к а " ;// Инициализация при о б ъ я в л е н и иstring s o m e S t r i n g 2 = " Э т о с т р о к а " ;Константа типа s t r i n g , именуемая также строковым литералом, представляет собойнабор символов, окруженный двойными кавычками. Символы в строке могут включатьспециальные символы, показанные в табл.
3.3. Строка не может быть перенесена на новую строку в исходном тексте на С#, но может содержать символ новой строки, как показано в следующем примере:// Неверная з а п и с ь с т р о к иstring s o m e S t r i n g = " Э т о с т р о к аи это с т р о к а " ;// А вот так - в е р н оstring 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 вы увидите текст,размещенный в двух строках:Это строкаи это строкаСтрока не является ни перечислимым типом, ни типом-значением — в процессоре несуществует встроенного типа строки. К строкам применим только один распространенныйоператор — оператор сложения, который просто объединяет две строки в одну, например:string s = "Это п р е д л о ж е н и е .
" + " И э т о т о ж е . " ;Приведенный код присваивает строке s значение:"Это предложение . И э т о т о ж е ."Строка без символов, записанная как "" (пара двойных кавычек), являетсякорректной строкой для типа s t r i n g , и называется пустой строкой. Пустаястрока отличается от нулевого символа ' \ 0 ' и от строки, содержащей любоеколичество пробелов ("").Кстати, все остальные типы данных в этой главе — типы-значения (value types).Строковый тип типом-значением не является.Все инструкции С# должны быть реализованы как машинные команды процессор а — процессора Intel в случае PC.
Эти процессоры также имеют собственнуюконцепцию переменных. Например, процессор Intel содержит восемь внутренниххранилищ, именуемых регистрами, каждый из которых может хранить одно значение i n t . Не вдаваясь в детали функционирования процессора, можно сказать,что все типы, описываемые в данной главе, за исключением d e c i m a l и s t r i n g ,являются встроенными для процессора. Таким образом, существует машиннаяГлава 3. Объявление переменных-значений67команда, суть которой в следующем: прибавить один i n t к другому. Имеется Iаналогичная команда и для сложения d o u b l e .Кроме того, переменные описанных типов (опять же, за исключением s t r i n g ) Iимеют фиксированную длину.
Переменные типа с фиксированной длиной всегда за-1нимают одно и то же количество памяти. Так что при присваивании а = Ь С# может!поместить значение b в а без каких-либо дополнительных мер, разработанных для Iтипов переменной длины. Эта характеристика дает этим типам переменных имя ти-1пы-значения.Типы i n t , d o u b l e , b o o l и и х "близкие родственники" наподобие беззнаково-1го i n t являются встроенными типами. Встроенные типы переменных и тип Id e c i m a l известны также как типы-значения.
Тип s t r i n g не относится ни Iк тем ни к другим.Типы, о которых речь пойдет в главе 6, "Объединение данных — классы и массивы",определяемые программистом и известные как ссылки, не являются ни встроенными, нитипами-значениями. Тип s t r i n g является ссылочным типом, хотя компилятор С# рассматривает его специальным образом в силу его широкой распространенности.Сравнение string и charХотя строки имеют дело с символами, тип s t r i n g существенно отличается от типаc h a r . Понятно, что имеются некоторые тривиальные отличия.
Так, символ помещаетсяв одинарные кавычки, а строка — в двойные. Кроме того, тип c h a r — это всегда одинсимвол, так что следующий код не имеет с м ы с л а — ни в плане сложения, ни в планеконкатенации:char cl =char с2 =char сЗ =' а ' ;' Ь 1 ;cl + с 2 ;На самом деле этот код почти компилируем, но его смысл существенно отличается от того, который мы ему приписываем. С# преобразует cl и с2 в значения типа i n t , представляющие собой числовые значения соответствующихсимволов, после чего складывает полученные значения. Ошибка возникает припопытке сохранить полученный результат в с З , так как при размещении значения типа i n t в переменной меньшего размера c h a r данные могут быть потеряны.
В любом случае, эта операция не имеет смысла.С другой стороны, строка может быть любой длины. Таким образом, конкатенациядвух строк вполне осмысленна:string si = " а " ;s t r i n g s2 = " b " ;s t r i n g s3 = si + s2;//Результат—"ab"В качестве части своей библиотеки С# определяет целый ряд строковых операций,которые будут описаны в главе 9, "Работа со строками в С # " .68Часть II.
Основы программирования в С#Соглашения по именованиюПрограммирование и так достаточно сложно, чтобы делать его еще сложнее.Чтобы код на С# было легче читать, обычно используются определенные соглашения по именованию переменных, которым желательно следовать, чтобы код былпонятен другим программистам.Имена всех объектов, кроме переменных, начинаются с прописной буквы,а имена переменных— со строчной.
Делайте эти имена как можно более информативными (зачастую это приводит к тому, что имена состоят из несколькихслов). Слова должны начинаться с прописной буквы, и лучше, если между ними небудет символов подчеркивания — например, t h i s I s A L o n g V a r i a b l e N a m e .Первая буква имени переменной указывает ее тип. Большинство таких букв тривиальны — f для f l o a t , d для d o u b l e , s для s t r i n g и так далее. Единственнымнарушающим правило символом является п для i n t . Есть еще одно исключение —по традиции, уходящей в программирование на Фортране, отдельные буквы i, j и ктакже используются как распространенные имена переменных типа i n t .Венгерская запись постепенно выходит из моды, по крайней мере в кругах программистов .NET. Тем не менее я все еще остаюсь ее поклонником, поскольку она позволяетмне знать тип каждой переменной в программе, не обращаясь к ее объявлению.В последних версиях Visual Studio вы можете просто подвести курсор к переменнойи получить информацию о ее типе в окне подсказки, что делает венгерскую запись менееполезной.
Однако вместо того чтобы встревать в "религиозные войны" по поводу тогоили иного способа именования, выберите тот, который вам по душе, и следуйте ему.В жизни очень мало абсолюта, но он присутствует в С#: любое выражение имеет значение и тип. В объявлении наподобие i n t п легко увидеть, что переменная п имеет типint. Разумно предположить, что тип результата вычисления п + 1 также i n t . Но чтоможно сказать о типе константы 1?Тип константы зависит от двух вещей: ее значения и наличия необязательной буквыв конце. Любое целое величиной до примерно 2 миллиардов (см. табл.