Compartilhar via


Expressões (guia de programação do C#)

Um expressão é uma seqüência de um ou mais operandos e operadores de zero ou mais que podem ser avaliadas como um valor único, objeto, método ou namespace.Expressões podem consistir em um valor literal, uma invocação de método, um operador e seus operandos, ou um nome simples.Nomes simples podem ser o nome de uma variável, membro de tipo, parâmetro do método, namespace ou tipo.

Expressões podem usar operadores que por sua vez, usar outras expressões como parâmetros ou chamadas de método cujos parâmetros são por sua vez, outras chamadas de método, para que as expressões podem variar de simples a complexas.A seguir estão dois exemplos de expressões:

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

Valores de expressão

Na maioria dos contextos em que as expressões são usadas, por exemplo, em instruções ou parâmetros de método, espera-se a expressão a ser avaliada como algum valor.Se x e y são inteiros, a expressão x + y for avaliada como um valor numérico.A expressão new MyClass() for avaliada como uma referência a uma nova instância de um MyClass objeto.A expressão myClass.ToString() for avaliada como uma seqüência de caracteres, porque esse é o tipo de retorno do método.No entanto, embora o nome do namespace é classificado como uma expressão, ele não é avaliada como um valor e, portanto, nunca pode ser o resultado final de qualquer expressão.Você não pode passar um nome de namespace para um parâmetro de método, usá-lo em uma nova expressão ou atribuí-la a uma variável.Você só pode ser usada como uma subexpressão em uma expressão maior.O mesmo vale para os tipos (diferentes de System.Type objetos), nomes de grupo de método (diferentes de métodos específicos) e o evento Adicionar e Remover acessadores.

Cada valor possui um tipo associado.Por exemplo, se x e y são as duas variáveis do tipo int, o valor da expressão x + y também é digitado como int.Se o valor é atribuído a uma variável de um tipo diferente, ou se x e y são tipos diferentes, as regras de conversão de tipo são aplicadas.Para obter mais informações sobre o funcionam de tais conversões, consulte Elenco e conversões de tipo (guia de programação do C#).

Estouros

Expressões numéricas podem causar estouros se o valor for maior que o valor máximo do tipo do valor.Para obter mais informações, consulte Marcada e desmarcada (C# Reference) e Tabela de conversões numérico explícita (referência de C#).

Precedência e associatividade

A maneira na qual uma expressão é avaliada é regida pelas regras de precedência do operador e associatividade de operadores.Para obter mais informações, consulte Operadores (guia de programação do C#).

A maioria das expressões, exceto as expressões de atribuição e expressões de invocação de método, devem ser incorporadas em uma instrução.Para obter mais informações, consulte Instruções (guia de programação do C#).

Literais e nomes simples

Os dois tipos mais simples de expressões são literais e nomes simples.Um literal é um valor constante que não tem nome.Por exemplo, no exemplo de código a seguir, ambos 5 e "Hello World" são valores literais:

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

Para obter mais informações sobre literais, consulte Tipos (referência de C#).

No exemplo anterior, ambos i e s são nomes simples que identificam as variáveis locais.Quando essas variáveis são usadas em uma expressão, o nome da variável é avaliado como o valor que atualmente está armazenado no local da variável na memória.Isso é mostrado no exemplo a seguir:

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

Expressões de invocação

No seguinte exemplo de código, a chamada para DoWork é uma expressão de invocação.

DoWork();

Uma chamada de método requer o nome do método, como um nome como no exemplo anterior, ou como resultado de outra expressão, seguido de parênteses e quaisquer parâmetros de método.Para obter mais informações, consulte Métodos (guia de programação do C#).Uma invocação de delegado usa o nome dos parâmetros de um representante e método entre parênteses.Para obter mais informações, consulte Representantes (guia de programação do C#).Invocações do método e o delegado invocações retornam o valor de retorno do método, se o método retorna um valor.Métodos que retornam void não podem ser usados no lugar de um valor em uma expressão.

Expressões de consulta

Em geral, as mesmas regras para expressões aplicam a expressões de consulta.Para obter mais informações, consulte Expressões de consulta do LINQ (guia de programação do C#).

Expressões Lambda

As expressões lambda representam "in-line métodos" sem nome, mas podem ter a entrada parâmetros e várias instruções que.Elas são amplamente usadas em LINQ para passar argumentos para métodos.As expressões lambda são compiladas para delegados ou árvores de expressão, dependendo do contexto em que são usados.Para obter mais informações, consulte Expressões lambda (guia de programação do C#).

Árvores de Expressão

Árvores de expressão permitem expressões para ser representado como estruturas de dados.Elas são usadas extensivamente por provedores LINQ para traduzir expressões de consulta em código que seja significativo em outro contexto, como, por exemplo, um banco de dados SQL.Para obter mais informações, consulte Árvores de expressão (C# e Visual Basic).

Comentários

Sempre que uma variável, propriedade objeto ou acesso a objetos indexador é identificado de uma expressão, o valor desse item é usado como o valor da expressão.Uma expressão pode ser colocada em qualquer lugar no C# onde um valor ou objeto é necessário, contanto que a expressão é avaliada, por fim, para o tipo necessário.

Capítulo do livro em destaque

Variáveis e expressões na início 2010 do Visual C#

Consulte também

Referência

Métodos (guia de programação do C#)

Representantes (guia de programação do C#)

Operadores (guia de programação do C#)

Tipos (guia de programação do C#)

Conceitos

Guia de programação do C#

Expressões de consulta do LINQ (guia de programação do C#)