C# для профессионалов. Том II
Шрифт:
В связи с контролируемостью контекста вторая строка будет порождать исключение. Если не определить
Строки
Обработка строк выполняется значительно легче в C#, чем это было раньше в C++. Это связано с понятием строки как базового типа данных, который распознается компилятором C#. В C# нет необходимости рассматривать строки как массивы символов.
Ближайшим эквивалентом для типа данных
□ Строка C# содержит символы Unicode, а не ANSI.
□ Строка C# имеет значительно больше методов и свойств, чем версия в C++.
□ Класс
Последовательности кодирования
C# использует тот же метод кодирования специальных символов, что и C++,— с помощью обратной наклонной черты. Вот список кодирования:
Последовательность | Имя символа | Кодировка Unicode |
---|---|---|
\' | Одиночная кавычка | 0x0027 |
\" | Двойная кавычка | 0x0022 |
\\ | Обратный слэш | 0х005C |
\0 | Null | 0x0000 |
\a | Сигнал | 0x0007 |
\b | Возврат на одну позицию | 0x0008 |
\f | Перевод страницы | 0x000C |
\n | Новая строка | 0x000A |
\r | Возврат каретки | 0x000D |
\t | Горизонтальная табуляция | 0x0009 |
\v | Вертикальная табуляция | 0x000B |
Это по сути означает, что в C# используются те же коды, что и в C++, за исключением того, что C# не распознает
Имеются два отличия между символами кодирования в C++ и C#:
□ Последовательность кодирования \0 распознается в C#. Однако она не используется как терминатор строки в C# и поэтому может встраиваться в строку. Строки C# работают, сохраняя отдельно свои длины, поэтому никакой символ не используется в качестве терминатора. Поэтому строки C# в действительности могут содержать любой символ Unicode.
□ C# имеет дополнительную последовательность кодирования
Согласно документации последовательность кодирования не зависит от регистра символов:
C# имеет также альтернативный метод представления строк, который более удобен для строк, содержащих специальные символы: размещение символа
Типы значений и ссылочные типы
C# разделяет все типы данных на две разновидности: типы значений и ссылочные типы. Это различие не имеет эквивалента в C++, где переменные всегда неявно содержат значения, если только переменная специально не объявлена как ссылка на другую переменную.
В C# тип значения действительно содержит свое значение. Все предопределенные типы данных в C# являются типами значений, за исключением
Ссылочный тип, как предполагает его имя, содержит только ссылку на то место в памяти, где хранятся данные. Синтаксически он действует таким же образом как ссылки в C++, но в терминах того, что происходит реально, ссылки C# ближе к указателям C++. В C#
В C# невозможно программным путем объявить определенную переменную как тип значения или как ссылочный тип, это определяется исключительно типом данных переменной.
Тип значения и ссылочный тип данных имеют особенности в управлении памятью, так как ссылочные типы всегда хранятся в куче, в то время как типы значений обычно хранятся в стеке. Это рассматривается более подробно в следующем разделе об управлении памятью.
Инициализация переменных