До недавнего времени наиболее популярной была система, известная под именем венгерской системы записи. Она предполагает использование перед именами всех переменных префикса, набираемого в нижнем регистре и обозначающего тип переменной. Например, если переменная имеет тип int, то перед ней следует поместить символ i, например, iAge. При использовании такой системы оказывается очень просто определять тип переменных даже при беглом взгляде на программу.
Однако в более современных языках, вроде С#, реализовать венгерскую систему оказывается совсем не просто. Эта система вполне может использоваться для простых типов, описанных выше (таб. 1.1-1.3), поскольку для обозначения каждого типа вполне достаточно префиксов, состоящих из одной или двух букв. Но поскольку имеется возможность создавать свои собственные типы и, кроме того, в базовой .NET Framework таких сложных типов присутствует несколько сотен, то система быстро перестает работать. Когда над проектом трудятся несколько человек, существенно возрастает вероятность того, что с использованием различных префиксов будет возникать путаница, которая может иметь самые разрушительные последствия.
В итоге разработчики пришли к выводу, что намного лучше именовать переменные просто в соответствии с их предназначением. Если при этом возникают какие-либо сомнения, то узнать тип переменной очень просто. В VS для этого надо просто поместить курсор мыши около имени переменной, и очень быстро появится окно, в котором будет указан ее тип.
В настоящее время в пространствах имен .NET Framework используются два соглашения об именовании, известные как PascalCase и camelCase. Отличить одну систему от другой можно по использованию регистра. Обе системы применяются к именам, составленным из нескольких слов; при этом каждое слово в составном имени набирается в нижнем регистре, за исключением первой буквы слова, которая должна набираться в верхнем регистре. В системе camelCase существует еще одно дополнительное правило, которое гласит, что первое слово должно начинаться с буквы в нижнем регистре.
Следующие имена переменных соответствуют правилам camelCase:
age | ||
firstName | ||
timeOfDeath |
А вот так имена должны записываться в соответствии с правилами PascalCase:
Age | ||
LastName | ||
WinterОfDisconten |
t
Следует отметить, что система PascalCase соответствует рекомендациям компании Microsoft.
Необходимо отметить, что многие предыдущие системы именования широко использовали символ подчеркивания, обычно в качестве
Тип(ы) | Значение | Суффикс | Пример/Допустимые значения |
bool | Логическое | Отсутствует | trueилиfalse |
int, uint, long, ulong | Целое | Отсутствует | 100 |
uint, ulong | Целое | u или U | 100U |
long, ulong | Целое | 1 илиL | 100L |
ulong | Целое | ul, uL, Ul, UL, lu, lU, Lu или LU | 100UL |
float | Вещественное | f или F | 1,5F |
double | Вещественное | Отсутствует, d или D | 1,5 |
decimal | Вещественное | m или М | 1,5M |
char | Символьное | Отсутствует | 'а' или escapeпоследовательность |
string | Строковое | Отсутствует | “a. . .а", может включать escape-последовательности |
Таблица 1.4 – Типы переменных и соответствующие им литеральные значения разделителя слов в имени переменной: например, my_first_variable. Однако, такой подход в настоящее время не рекомендуется.
1.2.4.Литеральны е значения
В предыдущем примере были использованы два литеральных значения: целое число и строка. Переменные других типов также обладают определенными литеральными значениями, которые сведены в приведенную ниже таблицу. Многие из них предполагают использование суффиксов, т. е. добавление в конец литерального значения некоторой последовательности символов, которая позволяет определить необходимый тип. Некоторые литеральные значения могут иметь несколько типов, которые определяются в время работы компилятора по контексту.
1.2.5.Литеральные строки
Приведем таблицу всех возможных escape-последовательностей для справочных целей.
В таблице 1.5 последний столбец содержит шестнадцатеричные значения кодов символов в кодировке Unicode.
Кроме приведенных выше символов, с помощью escape-последовательности можно задать любой символ в кодировке Unicode. Такая последовательность должна состоять из стандартного символа \, за которым следует символ u и четырехзначное шестнадцатеричное значение (например, те четыре цифры, которые расположены после символа х в последнем столбце вышеприведенной таблицы).
Отсюда следует, что, например, следующие две строки эквивалентны
“Karli\’s string.” | |
“Karli\u0027s string.” |
Очевидно, что возможность использовать escape-последовательности в кодировке Unicode дает дополнительную гибкость.
Также можно применять "дословные" строки (verbatim). Это означает, что в строку включаются все символы, находящиеся между двумя двойными кавычками, в том числе символы конца строки и символы, для которых в противном случае потребовалось бы использование escape-последовательностей. Единственным исключением из этого правила является escape-последовательность для символа двойной кавычки, которая должна использоваться во избежание преждевременного завершения обработки строки. Чтобы получить дословную строку, необходимо поместить в ее начало символ @:
@”Verbatim string literal.”
Эта строка может быть задана и обычным способом, а вот для следующего примера такой способ оказывается единственно возможным: @"A short list item 1 item 2" Escapeпоследовательность | Выводимый символ | Код символа в кодировке Unicode |
\’ | Одиночная кавычка | 0x0027 |
\” | Двойная кавычка | 0x0022 |
\ | Обратный слэш | 0х005С |
\0 | Null | 0x0000 |
\a | Тревога (выдает звуковой сигнал) | 0x0007 |
\b | Удаление предыдущего символа(backspace) | 0x0008 |
\f | Формирование строки (form feed) | 0х000С |
\n | Новая строка | 0х000А |
\r | Возврат каретки | 0x000D |
\t | Символ горизонтальной табуляции | 0x0009 |
\v | Символ вертикальной табуляции | 0x000B |
Дословные строки оказываются полезными, в частности, для имен файлов, поскольку в них обычно присутствует большое количество обратных слэшей. Использование обычных строк привело бы к необходимости использования Таблица 1.5 – Escape-последовательности, используемые в литеральных строках двойных обратных слэшей во всей строке. Например:
“C:\Temp\MyDir\M yFile.doc”Используя
дословные литеральные строки, мы можем сделать запись более удобочитаемой. Следующая дословная строка эквивалентна вышеприведенной:
@"С:\Temp\MyDir\M
yFile.doc”
Cтроки представляют собой ссылочные типы, в отличие от всех остальных типов, которые были приведены выше и которые являются значимыми типами. Одним из следствий этого является возможность присвоить строковой переменной значение Null: это будет означать, что данная строковая переменная не ссылается ни на какую строку. Подробнее этот вопрос будет рассматриваться ниже.
1.2.6.Объявление переменных и присваивание им значений
Для объявления переменных требуется просто указать их тип и имя, например: int age;
Далее ей присваивается значение с помощью оператора присваивания: age = 25;
Перед тем как начать использовать переменную, нужно ее инициализировать. В качестве такой инициализации может использоваться приведенное выше присваивание.
Существуют еще два способа объявления переменных. Первый из них – это возможность одновременного объявления сразу нескольких переменных одного типа, чего можно добиться перечислением их имен через запятую после указания типа:
int xSize, ySize;
В данном случае обе переменные – xSize и ySize – описаны как целые числа.