Другой простой конструкцией выбора, предлагаемой в C#, является оператор switch. Как и в других языках типа C, оператор switch позволяет обработать поток выполнения программы на основе заданного набора вариантов. Например, следующий метод Main() позволяет печатать строку, зависящую от выбранного варианта (случай default предназначен для обработки непредусмотренных вариантов выбора).
// Переключение по числовому значению.
static void Main(string[] args) {
Console.WriteLine("1 [C#], 2 [VB]");
Console.Write("Выберите язык, который вы предпочитаете: ");
string langChoice = Console.ReadLine();
int n = int.Parse(langChoice);
switch (n) {
case 1:
Console.WriteLine("Отлично! C# – это прекрасный язык.");
break;
case 2:
Console.WriteLine("VB .NET: ООП, многозадачность и т.д.!");
break;
default:
Console.WriteLine("Хорошо… удачи вам с таким выбором!");
break;
}
}
Замечание. В C# требуется, чтобы каждый вариант выбора (включая default), содержащий выполняемые операторы, завершался оператором break или goto, во избежание прохода сквозь структуру при невыполнении условия.
Приятной особенностью оператора switch в C# является то, что в рамках этого оператора вы можете оценивать не только числовые, но и строковые данные. Именно это используется в следующем операторе switch (при таком подходе нет необходимости переводить пользовательские данные в числовые значения).
static void Main(string[] args) {
Console.WriteLine("C# или VB");
Console.Write("Выберите язык, который вы предпочитаете: ");
string langChoice = Console.ReadLine();
switch (langChoice) {
case "C#":
Console.WriteLine("Отлично! C# – это прекрасный язык. ");
break;
case "VB":
Console.WriteLine("VB .NET: ООП, многозадачность и т.д.!");
break;
default:
Console.WriteLine("Хорошо… удачи вам с таким выбором!");
break;
}
}
Исходный код
Типы, характеризуемые значениями, и ссылочные типы
Подобно любому другому языку программирования, язык C# определяет ряд ключевых слов, представляющих базовые типы данных, такие как целые числа, символьные данные, числа с плавающим десятичным разделителем и логические (булевы) значения. Если вы работали с языком C++, то будете рады узнать, что здесь эти внутренние типы являются "фиксированными константами", т.е., например, после создания элемента целочисленных данных все языки .NET будут понимать природу этого типа и диапазон его значений,
Тип данных .NET может либо характеризоваться значением, либо быть ссылочным типом (т.е. характеризоваться ссылкой). К типам, характеризуемым значением, относятся все числовые типы данных (int, float и т.д.), а также перечни и структуры, размещаемые в
// Целочисленные данные характеризуются значением!
public void SomeMethod() {
int i = 0;
Console.WriteLine(i);
} // здесь
Когда вы присваиваете один характеризуемый значением тип другому, по умолчанию выполняется "почленное" копирование. Для числовых и булевых типов данных единственным "членом", подлежащим копированию, является непосредственное значение переменной,
// Для типов, характеризуемых значениями, в результате такого
// присваивания в стек помещаются две независимые переменные.
public void SomeMethod() {
int i = 99;
int j = i;
// После следующего присваивания значением 'i' останется 99.
j = 8732;
}