Операторы (руководство по программированию в C#)
Обновлен: Июль 2008
Действия программы выражаются в операторах. В общие действия включено объявление переменных, присвоение значений, вызов методов, проход по коллекциям и ветвление на один или другой блок кода, в зависимости от заданного условия. Порядок выполнения операторов в программе называется потоком управления или потоком выполнения. Поток управления может отличаться при каждом запуске программы, в зависимости от реакции программы на входные данные, которые она получает во время выполнения.
Оператор может состоять из одной строки кода, которая заканчивается точкой с запятой, или из ряда однострочных операторов в блоке. Блок оператора заключен в скобки ({}) и может содержать вложенные блоки. В следующем коде показаны два примера однострочных операторов и блок многострочного оператора:
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 a 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 a 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 #{0} is {1}. Circumference = {2:N2}",
counter, radius, circumference);
// 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. |
|
Оператор fixed. |
Оператор fixed не позволяет сборщику мусора переносить перемещаемую переменную. Дополнительные сведения см. в разделе fixed. |
Оператор lock. |
Оператор lock позволяет ограничить одновременный доступ к блокам кода только до одного потока. Дополнительные сведения см. в разделе lock. |
Помеченные операторы |
Оператор можно пометить и затем использовать ключевое слово goto для перехода к помеченному оператору. (См. пример в следующей строке.) |
Пустой оператор |
Пустой оператор состоит из точки с запятой. Он не выполняет никаких действий и его можно использовать в местах, в которых оператор необходим, но нет необходимости в выполнении каких-либо действий. В следующем примере показаны два способа использования пустого оператора: |
Внедренные операторы
В некоторых операторах, включая do, while, for и foreach, всегда есть внедренный оператор, следующий за ними. Этот внедренный оператор может быть либо одним оператором, либо несколькими операторами, заключенными в скобки ({}) в блоке оператора. Даже однострочные внедренные операторы могут быть заключены в скобки ({}), как показано в следующем примере:
// Recommended style. Embedded statement in a 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(b == 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#:
1.5 Операторы
8 Операторы
См. также
Основные понятия
Руководство по программированию в C#
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Июль 2008 |
Добавлены новые примеры кода и изменен текст. |
Улучшение информации. |