Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Действия, выполняемые программой, выражаются в инструкциях. Распространенные действия включают объявление переменных, назначение значений, вызов методов, циклирование по коллекциям и ветвление к одному или другому блоку кода в зависимости от заданного условия. Порядок выполнения инструкций в программе называется потоком управления или потока выполнения. Поток управления может изменяться при каждом запуске программы в зависимости от того, как программа реагирует на входные данные, получаемые во время выполнения.
Операция может состоять из одной строки кода, которая заканчивается точкой с запятой, или из ряда однострочных операций в блоке. Блок инструкций заключен в {} квадратные скобки и может содержать вложенные блоки. В следующем коде показаны два примера однострочных операторов и блок многострочных операторов.
public static void Main()
{
// Declaration statement.
int counter;
// Assignment statement.
counter = 1;
// Error! This is an expression, not an expression statement.
// counter + 1;
// Declaration statements with initializers are functionally
// equivalent to declaration statement followed by assignment statement:
int[] radii = [15, 32, 108, 74, 9]; // Declare and initialize an array.
const double pi = 3.14159; // Declare and initialize constant.
// foreach statement block that contains multiple statements.
foreach (int radius in radii)
{
// Declaration statement with initializer.
double circumference = pi * (2 * radius);
// Expression statement (method invocation). A single-line
// statement can span multiple text lines because line breaks
// are treated as white space, which is ignored by the compiler.
System.Console.WriteLine($"Radius of circle #{counter} is {radius}. Circumference = {circumference:N2}");
// Expression statement (postfix increment).
counter++;
} // End of foreach statement block
} // End of Main method body.
} // End of SimpleStatements class.
/*
Output:
Radius of circle #1 = 15. Circumference = 94.25
Radius of circle #2 = 32. Circumference = 201.06
Radius of circle #3 = 108. Circumference = 678.58
Radius of circle #4 = 74. Circumference = 464.96
Radius of circle #5 = 9. Circumference = 56.55
*/
Типы высказываний
В следующей таблице перечислены различные типы инструкций в C# и связанные с ними ключевые слова с ссылками на разделы, содержащие дополнительные сведения:
Категория | Ключевые слова C# и заметки |
---|---|
Инструкции объявления | Инструкция объявления вводит новую переменную или константу. Объявление переменной может при необходимости назначить значение переменной. В объявлении константы требуется присваивание. |
Инструкции выражений | Операторы выражений, вычисляющие значение, должны хранить значение в переменной. |
Операторы выбора | Конструкции выбора позволяют выполнять переход в разные разделы кода в зависимости от одного или нескольких указанных условий. Дополнительные сведения см. в следующих разделах: |
Операторы итерации | Операторы итерации позволяют выполнять циклы по коллекциям, таким как массивы, или выполнять один и тот же набор инструкций многократно, пока не будет выполнено указанное условие. Дополнительные сведения см. в следующих разделах: |
Операторы перехода | Операторы перехода перенаправляют управление в другой раздел кода. Дополнительные сведения см. в следующих разделах: |
Инструкции обработки исключений | Инструкции обработки исключений позволяют корректно восстанавливаться после исключительных условий, возникающих во время выполнения. Дополнительные сведения см. в следующих разделах: |
checked и unchecked |
Инструкции checked и unchecked позволяют указать, разрешено ли числовым операциям целочисленного типа вызывать переполнение, когда результат сохраняется в переменной, которая слишком мала, чтобы вместить это значение. |
Инструкция await |
Если пометить метод с помощью модификатора async, можно использовать в этом методе инструкцию await. Когда управление достигает await выражения в асинхронном методе, оно возвращается вызывающей стороне, и ход выполнения метода приостанавливается до тех пор, пока ожидаемая задача не завершится. После завершения задачи выполнение в методе может быть возобновлено.Для простого примера см. раздел Методы в "Асинхронные методы". Дополнительные сведения см. в статье "Асинхронное программирование с async и await". |
Утверждение yield return |
Итератор выполняет настраиваемую итерацию по коллекции, например по списку или массиву. Итератор использует инструкцию yield return для возврата всех элементов по одному. После достижения инструкции запоминается текущее yield return расположение в коде. Выполнение перезапускается с этой позиции, когда итератор вызывается в следующий раз.Дополнительные сведения см. в разделе Итераторы. |
Заявление fixed |
Оператор fixed предотвращает перемещение сборщиком мусора перемещаемой переменной. Дополнительные сведения см. в разделе "Исправлено". |
Инструкция lock |
Инструкция блокировки позволяет ограничить доступ к блокам кода только одному потоку за раз. Дополнительные сведения см. в разделе "Блокировка". |
Инструкции с метками | Вы можете дать инструкцию метку, а затем использовать ключевое слово goto для перехода к помеченной инструкции. (См. пример в следующей строке.) |
Пустая инструкция | Пустой оператор состоит из одной точки с запятой. Он ничего не делает и может использоваться там, где требуется утверждение, но не нужно выполнять никаких действий. |
Инструкции объявления
В следующем коде показаны примеры объявления переменных как с начальными присваиваниями, так и без них, а также пример объявления константы с необходимой инициализацией.
// Variable declaration statements.
double area;
double radius = 2;
// Constant declaration statement.
const double pi = 3.14159;
Операторы выражений
В следующем коде показаны примеры операторов выражений, включая присваивание, создание объекта с присваиванием и вызовом метода.
// Expression statement (assignment).
area = 3.14 * (radius * radius);
// Error. Not statement because no assignment:
//circ * 2;
// Expression statement (method invocation).
System.Console.WriteLine();
// Expression statement (new object creation).
System.Collections.Generic.List<string> strings =
new System.Collections.Generic.List<string>();
Пустая инструкция
В следующих примерах показаны два использования для пустой инструкции:
void ProcessMessages()
{
while (ProcessMessage())
; // Statement needed here.
}
void F()
{
//...
if (done) goto exit;
//...
exit:
; // Statement needed here.
}
Внедренные инструкции
Некоторые операторы, например, операторы итерации, всегда имеют встроенный оператор, следующий за ними. Эта встроенное утверждение может быть либо одним утверждением, либо несколькими утверждениями, заключенными в фигурные скобки в блоке утверждений. Даже однострочные внедренные инструкции могут быть заключены в {} квадратные скобки, как показано в следующем примере:
// Recommended style. Embedded statement in block.
foreach (string s in System.IO.Directory.GetDirectories(
System.Environment.CurrentDirectory))
{
System.Console.WriteLine(s);
}
// Not recommended.
foreach (string s in System.IO.Directory.GetDirectories(
System.Environment.CurrentDirectory))
System.Console.WriteLine(s);
Внедренная инструкция, которая не заключена в {} скобки, не может быть инструкцией объявления или инструкцией с меткой. Это показано в следующем примере:
if(pointB == true)
//Error CS1023:
int radius = 5;
Поместите внедренную инструкцию в блок, чтобы устранить ошибку:
if (b == true)
{
// OK:
System.DateTime d = System.DateTime.Now;
System.Console.WriteLine(d.ToLongDateString());
}
Вложенные блоки инструкций
Блоки инструкций могут вкладываться друг в друга, как показано в следующем коде:
foreach (string s in System.IO.Directory.GetDirectories(
System.Environment.CurrentDirectory))
{
if (s.StartsWith("CSharp"))
{
if (s.EndsWith("TempFolder"))
{
return s;
}
}
}
return "Not found.";
Недостижимые инструкции
Если компилятор определит, что поток управления никогда не достигнет конкретного оператора ни при каких обстоятельствах, он выдаст предупреждение CS0162, как показано в примере ниже.
// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
System.Console.WriteLine("I'll never write anything."); //CS0162
}
Спецификация языка C#
Дополнительные сведения см. в разделе "Инструкции " спецификации языка C#.