Выражения (Руководство по программированию в C#)

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

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

((x < 10) && ( x > 5)) || ((x > 20) && (x < 25)) 
System.Convert.ToInt32("35")

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

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

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

Переполнения

Числовые выражения могут привести к переполнениям, если значение больше максимального значения типа значения.Дополнительные сведения см. в разделах Checked и Unchecked (Справочник по C#) и Таблица явных числовых преобразований (Справочник по C#).

Приоритет и ассоциативность операторов

Способ вычисления выражения управляется правилами ассоциативности и приоритетом операторов.Дополнительные сведения см. в разделе Операторы (Руководство по программированию на C#).

Большинство выражений, за исключением выражений назначения и выражений вызова метода, должны быть встроены в оператор.Дополнительные сведения см. в разделе Операторы (Руководство по программированию в C#).

Литералы и простые имена

Двумя наиболее простыми типами выражений являются литералы и простые имена.Литерал представляет собой постоянное значение, у которого нет имени.Например, в следующем примере 5 и "Hello World" являются литералами.

// Expression statements.
int i = 5;
string s = "Hello World";

Дополнительные сведения о литералах см. в разделе Типы (Справочник по C#).

В предыдущем примере i и s являются простыми именами, которые определяют локальные переменные.При использовании таких переменных в выражениях результатом вычисления имени переменной является значение, которое в данное время хранится в расположении переменой в памяти.Это показано в следующем примере:

int num = 5;
System.Console.WriteLine(num); // Output: 5
num = 6;
System.Console.WriteLine(num); // Output: 6            

Выражения вызова

В следующем примере кода вызов метода DoWork является выражением вызова.

DoWork();

При вызове метода необходимо указать имя метода в явном виде, как было показано в предыдущем примере, или в виде результата другого выражения, после чего в скобках указываются все параметры этого метода.Дополнительные сведения см. в разделе Методы (Руководство по программированию на C#).При вызове делегата указывается имя делегата и параметры метода в скобках.Дополнительные сведения см. в разделе Делегаты (Руководство по программированию на C#).Результатом вызова метода или делегата является возвращаемое методом значение, если метод вообще возвращает значение.В качестве значений в выражениях нельзя использовать методы, возвращающие значение типа void.

Выражения запросов

Аналогичные правила в общем случае относятся и к выражениям запроса.Дополнительные сведения см. в разделе Выражения запросов LINQ (Руководство по программированию на C#).

Лямбда-выражения

Лямбда-выражения представляют собой "встроенные методы", у которых нет имен, но которые могут иметь входные параметры и несколько инструкций.Они активно используются в LINQ для передачи параметров методам.Лямбда-выражения компилируются в делегаты или в деревья выражений в зависимости от условий, при которых они используются.Дополнительные сведения см. в разделе Лямбда-выражения (Руководство по программированию в C#).

Деревья выражений

Деревья выражения позволяют представлять выражения в виде структур данных.Они активно используются поставщиками LINQ для преобразования выражений запросов в код, имеющий смысл в других контекстах, например в базах данных SQL.Дополнительные сведения см. в разделе Деревья выражений (C# и Visual Basic).

Заметки

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

Важная глава книги

переменные и выражения IN Начало Visual c# 2010

См. также

Ссылки

Методы (Руководство по программированию на C#)

Делегаты (Руководство по программированию на C#)

Операторы (Руководство по программированию на C#)

Типы (Руководство по программированию на C#)

Основные понятия

Руководство по программированию на C#

Выражения запросов LINQ (Руководство по программированию на C#)