Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический_курс.doc
Скачиваний:
37
Добавлен:
10.11.2019
Размер:
7.68 Mб
Скачать

3. Внедрённые операторы

В некоторых операторах, включая do, while, for и foreach, всегда есть внедренный оператор, следующий за ними. Этот внедрённый оператор может быть либо одним оператором, либо несколькими операторами, заключенными в скобки ({}) в блоке оператора. Даже однострочные внедренные операторы могут быть заключены в скобки ({}), как показано в следующем примере:

// Рекомендуемый стиль блока

foreach (string s in System.IO.Directory.GetDirectories(

System.Environment.CurrentDirectory))

{

System.Console.WriteLine(s);

}

// Не рекомендуемый

foreach (string s in System.IO.Directory.GetDirectories(

System.Environment.CurrentDirectory))

System.Console.WriteLine(s);

Внедрённый оператор, не заключенный в скобки ({}), не может быть оператором объявления или помеченным оператором. Это показано в следующем примере:

if (pointB == true)

// Ошибка CS1023

int radius = 5;

Чтобы устранить ошибку, поместим внедрённый оператор в блок:

if (b == true)

{

// OK

DateTime d = System.DateTime.Now;

Console.WriteLine(d.ToLongDateString());

}

4. Вложенные блоки операторов

Блоки операторов могут быть вложенными, как показано в следующем коде:

foreach (string s in System.IO.Directory.GetDirectories(

System.Environment.CurrentDirectory))

{

if (s.StartsWith("CSharp"))

{

if (s.EndsWith("TempFolder"))

{

return s;

}

}

}

return "Not found.";

5. Недостижимые операторы

Если компилятор определяет, что поток управления ни при каких обстоятельствах не сможет достичь определенного оператора, то он выдаст предупреждение CS0162, как показано в следующем примере:

// Недостижимый код организуем так

const int val = 5;

if (val < 4)

{

System.Console.WriteLine("Я никогда ничего не напишу :(."); // CS0162: "Обнаружен недостижимый код"

}

6. Выражения

Выражение представляет собой последовательность из одного или нескольких операндов и от нуля до нескольких операторов, которую можно вычислить, получив в результате одно значение, объект, метод или пространство имён. Выражение может состоять из литерала, вызова метода, оператора или его операнды, а также из простого имени. В качестве простого имени может выступать имя переменной, члена типа, параметра метода, пространства имен или типа.

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

((x < 10) && ( x > 5)) || ((x > 20) && (x < 25))

System.Convert.ToInt32("35")

7. Значения выражений

В большинстве контекстов, в которых используются выражения, например, в операторах или в параметрах методов, предполагается, что результатом вычисления выражения будет какое-то значение. Если x и y — целые числа, то результатом вычисления выражения x + y будет числовое значение. Результатом вычисления выражения new MyClass() будет ссылка на новый экземпляр объекта MyClass. Результатом вычисления выражения myClass.ToString() является строка, поскольку она является возвращаемым типом метода. Однако хотя имя пространства имён классифицируется как выражение, значение не будет результатом его вычисления и, поэтому, оно никогда не будет конечным результатом какого-либо выражения. Имя пространства имен нельзя передать параметру метода, или использовать его в новом выражении, или присвоить его переменной. Его можно использовать только как часть выражения в более крупном выражении. Это также относится к типам (в отличие от объектов System.Type), именам групп методов (в отличие от отдельных методов) и к методам доступа к событиям add и remove.

У каждого значения есть связанный с ним тип. Например, если x и y — переменные типа int, то значение выражения x + y также типизируется как int. Если значение присвоено переменной другого типа или если x и y принадлежат к разным типам, то применяются правила преобразования типов.

Таким образом, если в выражении присутствует переменная, свойство объекта или индексатор объекта, для вычисления выражения используется значение этого элемента. В C# выражение можно использовать везде, где требуется значение или объект, если результат вычисления выражения соответствует требуемому типу.