Чтение онлайн

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

switch (MyString) {

case "Hello":

 // что-нибудь сделать

 goto case "Goodbye"; // перейдет к выполнению инструкций

// в предложении "Goodbye"

case "Goodbye":

 // сделать что-то еще

 break;

case "Black": // здесь можно провалиться, так как он пустой

case "White":

 // сделать что-то еще

 // выполняется, если MyString содержит

 // либо "Black", либо "White"

 break;

default:

 int j = 3;

 break;

}

Компания Microsoft

решила использовать инструкцию
goto
в этом контексте, чтобы предотвратить появление ошибок в случае, если требовалось выполнить пропущенный
break
, и код в инструкции
switch
проваливался в следующее предложение
case
.

foreach

C# предоставляет дополнительную инструкцию управления потоком выполнения

foreach
.
foreach
делает цикл по всем элементам массива или коллекции, не требуя явной спецификации индексов. Цикл
foreach
на массиве может выглядеть следующим образом. В этом примере предполагается, что
MyArray
является массивом
double
, и необходимо вывести каждое значение в консольном окне. Чтобы сделать это, используем следующий код:

foreach (double SomeElement in MyArray) {

 Console.WriteLine(SomeElement);

}

Отметим что в этом цикле

SomeElement
является именем, присвоенным переменной для итерации по циклу; здесь можно выбрать любое имя не конфликтующее с другими именами переменных.

Запишем также приведенный выше цикл следующим образом:

foreach (double SomeElement in MyArray)

 Console.WriteLine(SomeElement);

так как блочные инструкции в C# работают таким же образом, как составные инструкции в C++.

Этот цикл будет иметь точно такой же результат, как и следующий:

for (int I=0; I < MyArray.Length; I++) {

 Console.WriteLine(MyArray[i]);

}

(Отметим, что вторая версия иллюстрирует также, как получить число элементов в массиве в C#. Мы рассмотрим, как массив объявляется в C#, позже.)

Отметим, однако, что в отличие от доступа к элементам массива, цикл

foreach
предоставляет к своим элементам доступ только для чтения. Следовательно, следующий код не будет компилироваться.

foreach (double SomeElement in MyArray)

 SomeElement *= 2; // Неверно, для SomeElement нельзя выполнить

// присваивание

Мы упомянули, что цикл

foreach
может использоваться для массивов или коллекций. Коллекция не имеет аналога в C++, хотя концепция стала общераспространённой в Windows благодаря ее использованию в VB и COM. Коллекция по сути является классом, который реализует интерфейс
IEnumerable
. Так как это включает поддержку из базовых классов, понятие коллекция объясняется в главе 7.

Переменные

Определения переменных следуют в основном тем же образцам в C#, что и в C++:

int NCustomers, Result;

double DistanceTravelled;

double Height = 3.75;

const decimal Balance = 344.56M;

Хотя, как можно было ожидать, некоторые из типов различны. Как было замечено ранее, переменные могут быть объявлены только локально в методе или как члены класса. C# не имеет эквивалент, глобальных или статических (то есть с областью действия, ограниченной файлом) переменных в C++. Как уже говорилось, переменные, являющиеся членами класса, называются в C# полями.

Отметим, что C# также строго различаем типы данных, хранимые в стеке (типы данных значений) и хранимые в куче (ссылочные типы данных). Мы позже рассмотрим этот вопрос более подробно.

Базовые

типы данных

Как и в C++, C# имеет ряд предопределенные типов данных, и можно определять собственные типы данных, такие как классы или структуры.

В C# и C++ предопределенные типы данных несколько различаются. Типы данных для C# приведены в таблице:

Имя Содержит Символ
sbyte
8-битовое целое число со знаком  
byte
8-битовое целое число без знака  
short
16-битовое целое число со знаком  
ushort
16-битовое целое число без знака  
int
32-битовое целое число со знаком  
uint
32-битовое целое число без знака
U
long
64-битовое целое число со знаком
L
ulong
64-битовое целое число без знака
UL
float
32-битовое значение с плавающей точкой со знаком
F
double
64-битовое значение с плавающей точкой со знаком
D
bool
true
или
false
 
char
16-битовый символ Unicode
''
decimal
Число с плавающей точкой с 28 значащими цифрами
M
string
Множество символов Unicode переменной длины
""
object
Используется там, где не определен тип данных. Ближайшим эквивалентом в C++ является
void*
, за исключением того, что
object
не является указателем.
 

В приведенной выше таблице символ в третьем столбце указывает букву, которая может быть помещена после числа, чтобы указать его тип явно, например,

28UL
означает число 28, хранимое как
long
без знака. Как и в случае C++, одиночные кавычки используются для обозначения символов, двойные кавычки для строк. Однако в C# символы всегда являются символами Unicode, а строки являются определенным ссылочным типом, а не просто массивом символов.

Типы данных в C# используются более аккуратно, чем в C++. Например, в C++ обычно ожидается, что

int
будет занимать 2 байта (16 битов), но определение ANSI C++ разрешает, чтобы это зависело от платформы. Следовательно, в Windows
int
в C++ занимает 4 байта, столько же сколько и
long
. Это очевидно вызывает достаточно много проблем совместимости при переносе программ C++ между платформами. С другой стороны, в C# каждый предопределенный тип данных (за исключением
string
и
object
) имеет явное определение занимаемой памяти.

Поделиться:
Популярные книги

Отверженный. Дилогия

Опсокополос Алексис
Отверженный
Фантастика:
фэнтези
7.51
рейтинг книги
Отверженный. Дилогия

Кодекс Крови. Книга V

Борзых М.
5. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга V

Идеальный мир для Лекаря 28

Сапфир Олег
28. Лекарь
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Идеальный мир для Лекаря 28

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Бракованная невеста. Академия драконов

Милославская Анастасия
Фантастика:
фэнтези
сказочная фантастика
5.00
рейтинг книги
Бракованная невеста. Академия драконов

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

На распутье

Кронос Александр
2. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На распутье

Контракт на материнство

Вильде Арина
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Контракт на материнство

Волков. Гимназия №6

Пылаев Валерий
1. Волков
Фантастика:
попаданцы
альтернативная история
аниме
7.00
рейтинг книги
Волков. Гимназия №6

Элита элит

Злотников Роман Валерьевич
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Элита элит

Седьмая жена короля

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Седьмая жена короля

Измена. Наследник для дракона

Солт Елена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Измена. Наследник для дракона

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Гримуар темного лорда IX

Грехов Тимофей
9. Гримуар темного лорда
Фантастика:
попаданцы
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда IX