Instruções (Guia de Programação em C#)
As ações que um programa realiza são expressas em declarações. As ações comuns incluem declarar variáveis, atribuir valores, chamar métodos, percorrer coleções e ramificar para um ou outro bloco de código, dependendo de uma determinada condição. A ordem na qual as instruções são executadas em um programa é chamada de fluxo de controle ou fluxo de execução. O fluxo de controle pode variar toda vez que um programa é executado, dependendo de como o programa reage à entrada que recebe em tempo de execução.
Uma instrução pode consistir em uma única linha de código que termina em ponto-e-vírgula ou uma série de instruções de linha única em um bloco. Um bloco de instrução é colocado entre {} colchetes e pode conter blocos aninhados. O código a seguir mostra dois exemplos de instruções de linha única e um bloco de instrução de várias linhas:
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 #{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
*/
Tipos de declarações
A tabela a seguir lista os vários tipos de instruções em C# e suas palavras-chave associadas, com links para tópicos que incluem mais informações:
Categoria | Palavras-chave / notas em C# |
---|---|
Declarações de declaração | Uma instrução de declaração introduz uma nova variável ou constante. Uma declaração de variável pode, opcionalmente, atribuir um valor à variável. Em uma declaração constante, a atribuição é necessária. |
Enunciados de expressão | As instruções de expressão que calculam um valor devem armazenar o valor em uma variável. |
Declarações de seleção | As instruções de seleção permitem ramificar para diferentes seções de código, dependendo de uma ou mais condições especificadas. Para obter mais informações, consulte os seguintes tópicos: |
Instruções de iteração | As instruções de iteração permitem que você percorra coleções como matrizes ou execute o mesmo conjunto de instruções repetidamente até que uma condição especificada seja atendida. Para obter mais informações, consulte os seguintes tópicos: |
Instruções de salto | As instruções Jump transferem o controle para outra seção do código. Para obter mais informações, consulte os seguintes tópicos: |
Declarações de tratamento de exceções | As instruções de tratamento de exceções permitem que você se recupere normalmente de condições excecionais que ocorrem em tempo de execução. Para obter mais informações, consulte os seguintes tópicos: |
checked e unchecked |
As checked instruções and unchecked permitem especificar se operações numéricas de tipo integral podem causar um estouro quando o resultado é armazenado em uma variável que é muito pequena para manter o valor resultante. |
A await declaração |
Se você marcar um método com o modificador async , poderá usar o operador await no método. Quando o controle atinge uma await expressão no método assíncrono, o controle retorna ao chamador e o progresso no método é suspenso até que a tarefa aguardada seja concluída. Quando a tarefa estiver concluída, a execução poderá ser retomada no método.Para obter um exemplo simples, consulte a seção "Métodos assíncronos" de Métodos. Para obter mais informações, consulte Programação assíncrona com assíncrono e aguarde. |
A yield return declaração |
Um iterador executa uma iteração personalizada sobre uma coleção, como uma lista ou uma matriz. Um iterador usa a instrução yield return para retornar cada elemento, um de cada vez. Quando uma yield return instrução é alcançada, o local atual no código é lembrado. A execução é reiniciada a partir desse local quando o iterador é chamado na próxima vez.Para obter mais informações, consulte Iteradores. |
A fixed declaração |
A declaração fixa impede que o coletor de lixo realoque uma variável móvel. Para obter mais informações, consulte fixo. |
A lock declaração |
A instrução lock permite limitar o acesso a blocos de código a apenas um thread de cada vez. Para obter mais informações, consulte bloquear. |
Declarações rotuladas | Você pode dar um rótulo a uma instrução e, em seguida, usar a palavra-chave goto para ir para a instrução rotulada. (Veja o exemplo na linha a seguir.) |
A declaração vazia | A instrução vazia consiste em um único ponto-e-vírgula. Ele não faz nada e pode ser usado em locais onde uma declaração é necessária, mas nenhuma ação precisa ser executada. |
Declarações de declaração
O código a seguir mostra exemplos de declarações de variáveis com e sem uma atribuição inicial e uma declaração constante com a inicialização necessária.
// Variable declaration statements.
double area;
double radius = 2;
// Constant declaration statement.
const double pi = 3.14159;
Enunciados de expressão
O código a seguir mostra exemplos de instruções de expressão, incluindo atribuição, criação de objeto com atribuição e invocação de método.
// 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>();
A declaração vazia
Os exemplos a seguir mostram dois usos para uma instrução vazia:
void ProcessMessages()
{
while (ProcessMessage())
; // Statement needed here.
}
void F()
{
//...
if (done) goto exit;
//...
exit:
; // Statement needed here.
}
Instruções incorporadas
Algumas instruções, por exemplo, instruções de iteração, sempre têm uma instrução incorporada que as segue. Esta instrução incorporada pode ser uma única instrução ou várias instruções entre {} parênteses em um bloco de instrução. Mesmo instruções incorporadas de linha única podem ser colocadas entre {} parênteses, conforme mostrado no exemplo a seguir:
// 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);
Uma instrução incorporada que não está entre {} parênteses não pode ser uma declaração ou uma instrução rotulada. Isso é mostrado no exemplo a seguir:
if(pointB == true)
//Error CS1023:
int radius = 5;
Coloque a instrução incorporada em um bloco para corrigir o erro:
if (b == true)
{
// OK:
System.DateTime d = System.DateTime.Now;
System.Console.WriteLine(d.ToLongDateString());
}
Blocos de instrução aninhados
Os blocos de instrução podem ser aninhados, conforme mostrado no código a seguir:
foreach (string s in System.IO.Directory.GetDirectories(
System.Environment.CurrentDirectory))
{
if (s.StartsWith("CSharp"))
{
if (s.EndsWith("TempFolder"))
{
return s;
}
}
}
return "Not found.";
Declarações inacessíveis
Se o compilador determinar que o fluxo de controle nunca pode alcançar uma instrução específica em nenhuma circunstância, ele produzirá aviso CS0162, como mostrado no exemplo a seguir:
// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
System.Console.WriteLine("I'll never write anything."); //CS0162
}
Especificação da linguagem C#
Para obter mais informações, consulte a seção Instruções da especificação da linguagem C#.