Operadores (Guia de Programação em C#)
Em C#, um operador é um elemento de programa aplicado a um ou mais operandos em uma expressão ou instrução. Os operadores que usam um operando, como o operador de incremento (++) ou new, são referidos como operadores unários. Os operadores que usam dois operandos, como operadores aritméticos (+,-,*,/), são referidos como operadores binários. Um operador, o operador condicional (?:), usa três operandos e é o único operador ternário em C#.
A seguinte instrução de C# contém um único operador unário e um operando único. O operador de incremento, ++, modifica o valor do operando y.
y++;
A seguinte instrução de C# contém dois operadores binários, cada um com dois operandos. O operador de atribuição, =, contém a variável inteira y e a expressão 2 + 3 como operandos. A expressão 2 + 3 em si consiste no operador de adição e dois operandos, 2 e 3.
y = 2 + 3;
Operadores, avaliação e precedência de operadores
Um operando pode ser uma expressão válida composta por qualquer comprimento de código e pode incluir qualquer número de subexpressões. Em uma expressão que contém vários operadores, a ordem em que os operadores são aplicados é determinada pela precedência de operadores, associatividade e parênteses.
Cada operador possui uma precedência definida. Em uma expressão com vários operadores e diferentes níveis de precedência, a precedência dos operadores determina a ordem em que os operadores são avaliados. Por exemplo, a seguinte instrução atribui 3 a n1.
n1 = 11 - 2 * 4;
A multiplicação é executada primeiro porque ela tem precedência sobre a subtração.
A tabela a seguir separa os operadores em categorias com base no tipo de operação que eles executam. As categorias são listadas em ordem de precedência.
Operadores primários
Expressão |
Descrição |
---|---|
x.y |
Acesso de membros |
f(x) |
Invocação de método e delegado |
a[x] |
Acesso de matriz e indexador |
x++ |
Pós-incremento |
x-- |
Pós-decremento |
novo T (...) |
Criação de objeto e delegado |
new T(...){...} |
Criação de objeto com inicializador. Consulte Inicializadores de objeto e coleção (Guia de Programação em C#). |
new {...} |
Inicializador de objeto anônimo. Consulte Tipos anônimos (Guia de Programação em C#). |
new T[...] |
Criação de matriz. Consulte Matrizes (Guia de Programação em C#). |
typeof(T) |
Obtém objeto System.Type para T |
selecionado(x) |
Avalia expressão no contexto selecionado |
desmarcado(x) |
Avalia expressão no contexto desmarcado |
padrão (T) |
Obtém valor padrão do tipo T |
delegado {} |
Função anônima (método anônimo) |
Operadores unários
Expressão |
Descrição |
---|---|
+x |
Identidade |
-x |
Negação |
!x |
Negação lógica |
~x |
Negação bit a bit |
++x |
Pré-incremento |
--x |
Pré-decremento |
(T)x |
Converte explicitamente x no tipo T |
Operadores de multiplicação
Expressão |
Descrição |
---|---|
Multiplicação |
|
Divisão |
|
Restante |
Operadores aditivos
Expressão |
Descrição |
---|---|
x + y |
Adição, concatenação de cadeia de caracteres, combinação de delegados |
x - y |
Subtração, remoção de delegado |
Operadores Shift
Expressão |
Descrição |
---|---|
x << y |
Shift esquerdo |
x >> y |
Shift direito |
Operadores de tipo e relacionais
Expressão |
Descrição |
---|---|
x < y |
Menor que |
x > y |
Maior que |
x <= y |
Menor que ou igual a |
x >= y |
Maior que ou igual a |
x é T |
Retorna true se x for T, caso contrário, false |
x como T |
Retorna x digitado como T ou nulo se x não for T |
Operadores de igualdade
Expressão |
Descrição |
---|---|
x == y |
Igual |
x != y |
Não é igual a |
Operadores lógicos, condicionais e nulos
Categoria |
Expressão |
Descrição |
---|---|---|
AND lógico |
x & y |
AND bit a bit inteiro, AND lógico booliano |
XOR lógico |
x ^ y |
XOR bit a bit inteiro, XOR lógico booliano |
OR lógico |
x | y |
OR bit a bit inteiro, OR lógico booliano |
AND condicional |
x & & y |
Avalia y somente se x for true |
OR condicional |
x || y |
Avalia y somente se x for false |
Coalescência nula |
x ?? y |
Avalia como y se x for nulo, caso contrário, como x |
Condicional |
x ?: y : z |
Avalia como y se x for true, z se x for false |
Operadores de atribuição e anônimos
Expressão |
Descrição |
---|---|
Atribuição |
|
x op= y |
Atribuição composta. Supports these operators: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>= |
(T x) => y |
Função anônima (expressão lambda) |
Associatividade
Quando dois ou mais operadores com a mesma precedência estiverem presentes em uma expressão, eles serão avaliados com base em associatividade. Os operadores associativos esquerdos são avaliados em ordem da esquerda para a direita. Por exemplo, x * y / z é avaliado como (x * y) / z. Os operadores associativos direitos são avaliados em ordem da direita para a esquerda. Por exemplo, o operador de atribuição é associativo direito. Se ele não fosse, o código a seguir resultaria em um erro.
int a, b, c;
c = 1;
// The following two lines are equivalent.
a = b = c;
a = (b = c);
// The following line, which forces left associativity, causes an error.
//(a = b) = c;
Como outro exemplo do operador ternário (?:) é associativo direito. A maioria dos operadores binários permanecem associativos.
Se os operadores em uma expressão forem associativos direitos ou esquerdos, os operandos de cada expressão serão avaliados primeiro, da esquerda para a direita. Os exemplos a seguir ilustram a ordem de avaliação de operadores e operandos.
Instrução |
Ordem de avaliação |
---|---|
a = b |
a, b, = |
a = b + c |
a, b, c, +, = |
a = b + c * d |
a, b, c, d, *, +, = |
a = b * c + d |
a, b, c, *, d, +, = |
a = b - c + d |
a, b, c, -, d, +, = |
a += b -= c |
a, b, c, -=, += |
Adicionando parênteses
Você pode alterar a ordem imposta pela precedência de operadores e a associatividade ao usar parênteses. Por exemplo, 2 + 3 * 2 resulta normalmente em 8, pois operadores multiplicativos têm precedência sobre operadores aditivos. No entanto, se você escrever a expressão como (2 + 3) * 2, a adição será avaliada antes da multiplicação e o resultado será 10. Os exemplos a seguir ilustram a ordem de avaliação em expressões com parênteses. Como nos exemplos anteriores, os operandos são avaliados antes que o operador seja aplicado.
Instrução |
Ordem de avaliação |
---|---|
a = (b + c) * d |
a, b, c, +, d, *, = |
a = b - (c + d) |
a, b, c, d, +, -, = |
a = (b + c) * (d - e) |
a, b, c, +, d, e, -, *, = |
Sobrecarga de operador
Você pode alterar o comportamento dos operadores para classes e structs personalizados. Esse processo é chamado sobrecarga de operador. Para obter mais informações, consulte Operadores sobrecarregáveis (Guia de Programação em C#).
Seções relacionadas
Para obter mais informações, consulte Palavras-chave de operador (Referência de C#) e Operadores em C#.
Consulte também
Referência
Instruções, expressões e operadores (Guia de Programação em C#)