Instrukcje (Przewodnik programowania w języku C#)
Akcje podejmowane przez program są wyrażane w instrukcjach. Typowe akcje obejmują deklarowanie zmiennych, przypisywanie wartości, wywoływanie metod, pętle przez kolekcje i rozgałęzianie do jednego lub innego bloku kodu, w zależności od danego warunku. Kolejność wykonywania instrukcji w programie jest nazywana przepływem sterowania lub przepływem wykonywania. Przepływ sterowania może się różnić za każdym razem, gdy program jest uruchamiany, w zależności od tego, jak program reaguje na dane wejściowe odbierane w czasie wykonywania.
Instrukcja może składać się z jednego wiersza kodu kończącego się średnikiem lub serii instrukcji jednowierszowych w bloku. Blok instrukcji jest ujęty w {} nawiasy i może zawierać zagnieżdżone bloki. Poniższy kod przedstawia dwa przykłady instrukcji jednowierszowych i blok instrukcji wielowierszowych:
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
*/
Typy instrukcji
Poniższa tabela zawiera listę różnych typów instrukcji w języku C# i skojarzonych ze nimi słów kluczowych, z linkami do tematów, które zawierają więcej informacji:
Kategoria | Słowa kluczowe/notatki w języku C# |
---|---|
Instrukcje deklaracji | Instrukcja deklaracji wprowadza nową zmienną lub stałą. Deklaracja zmiennej może opcjonalnie przypisać wartość do zmiennej. W deklaracji stałej wymagane jest przypisanie. |
Instrukcje wyrażeń | Instrukcje wyrażeń, które obliczają wartość, muszą przechowywać wartość w zmiennej. |
Instrukcje wyboru | Instrukcje wyboru umożliwiają rozgałęzienie do różnych sekcji kodu w zależności od co najmniej jednego określonego warunków. Aby uzyskać więcej informacji, zobacz następujące tematy: |
Instrukcje iteracji | Instrukcje iteracji umożliwiają wykonywanie pętli przez kolekcje, takie jak tablice, lub wielokrotne wykonywanie tego samego zestawu instrukcji do momentu spełnienia określonego warunku. Aby uzyskać więcej informacji, zobacz następujące tematy: |
Instrukcje skoku | Przeskok instrukcji transferuje kontrolkę do innej sekcji kodu. Aby uzyskać więcej informacji, zobacz następujące tematy: |
Instrukcje obsługi wyjątków | Instrukcje obsługi wyjątków umożliwiają bezproblemowe odzyskiwanie po wyjątkowych warunkach występujących w czasie wykonywania. Aby uzyskać więcej informacji, zobacz następujące tematy: |
checked i unchecked |
Instrukcje checked i unchecked umożliwiają określenie, czy operacje liczbowe typu całkowitego mogą powodować przepełnienie, gdy wynik jest przechowywany w zmiennej, która jest zbyt mała, aby przechowywać wynikową wartość. |
Instrukcja await |
Jeśli oznaczysz metodę za pomocą modyfikatora asynchronicznego , możesz użyć operatora await w metodzie . Gdy kontrolka await osiągnie wyrażenie w metodzie asynchronicznej, kontrolka powraca do wywołującego i postęp w metodzie jest zawieszony do momentu zakończenia oczekiwanego zadania. Po zakończeniu zadania wykonanie może być wznowione w metodzie .Aby zapoznać się z prostym przykładem, zobacz sekcję "Metody asynchroniczne" w sekcji Metody. Aby uzyskać więcej informacji, zobacz Asynchroniczne programowanie za pomocą asynchronicznego i await. |
Instrukcja yield return |
Iterator wykonuje iterację niestandardową w kolekcji, taką jak lista lub tablica. Iterator używa instrukcji zwrotu wydajności, aby zwrócić każdy element jeden naraz. yield return Po osiągnięciu instrukcji zostanie zapamiętana bieżąca lokalizacja w kodzie. Wykonanie jest uruchamiane ponownie z tej lokalizacji, gdy iterator jest wywoływany następnym razem.Aby uzyskać więcej informacji, zobacz Iteratory. |
Instrukcja fixed |
Stała instrukcja uniemożliwia przeniesienie zmiennej wymiennej przez moduł odśmiecania pamięci. Aby uzyskać więcej informacji, zobacz naprawiono. |
Instrukcja lock |
Instrukcja lock umożliwia ograniczenie dostępu do bloków kodu tylko do jednego wątku naraz. Aby uzyskać więcej informacji, zobacz blokada. |
Instrukcje oznaczone | Możesz nadać instrukcji etykietę, a następnie użyć słowa kluczowego goto , aby przejść do instrukcji oznaczonej etykietą. (Zobacz przykład w poniższym wierszu). |
Pusta instrukcja | Pusta instrukcja składa się z jednego średnika. Nic nie robi i można go używać w miejscach, w których instrukcja jest wymagana, ale nie trzeba wykonywać żadnych akcji. |
Instrukcje deklaracji
Poniższy kod przedstawia przykłady deklaracji zmiennych z przypisaniem początkowym i bez niej oraz stałą deklarację z niezbędną inicjacją.
// Variable declaration statements.
double area;
double radius = 2;
// Constant declaration statement.
const double pi = 3.14159;
Instrukcje wyrażeń
Poniższy kod przedstawia przykłady instrukcji wyrażeń, w tym przypisania, tworzenia obiektów z przypisaniem i wywołania metody.
// 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>();
Pusta instrukcja
W poniższych przykładach pokazano dwa zastosowania dla pustej instrukcji:
void ProcessMessages()
{
while (ProcessMessage())
; // Statement needed here.
}
void F()
{
//...
if (done) goto exit;
//...
exit:
; // Statement needed here.
}
Instrukcje osadzone
Niektóre instrukcje, na przykład instrukcje iteracji, zawsze mają osadzoną instrukcję, która jest zgodna z nimi. Ta osadzona instrukcja może być pojedynczą instrukcją lub wieloma instrukcjami ujętymi {} w nawiasy w bloku instrukcji. Nawet instrukcje osadzone jednowierszowe można ujęć w {} nawiasy, jak pokazano w poniższym przykładzie:
// 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);
Osadzona instrukcja, która nie jest ujęta w {} nawiasy, nie może być instrukcją deklaracji ani instrukcją oznaczoną etykietą. Jest to pokazane w poniższym przykładzie:
if(pointB == true)
//Error CS1023:
int radius = 5;
Umieść osadzoną instrukcję w bloku, aby naprawić błąd:
if (b == true)
{
// OK:
System.DateTime d = System.DateTime.Now;
System.Console.WriteLine(d.ToLongDateString());
}
Zagnieżdżone bloki instrukcji
Bloki instrukcji można zagnieżdżać, jak pokazano w poniższym kodzie:
foreach (string s in System.IO.Directory.GetDirectories(
System.Environment.CurrentDirectory))
{
if (s.StartsWith("CSharp"))
{
if (s.EndsWith("TempFolder"))
{
return s;
}
}
}
return "Not found.";
Instrukcje niemożliwe do osiągnięcia
Jeśli kompilator ustali, że przepływ kontrolki nigdy nie osiągnie określonej instrukcji w żadnych okolicznościach, wygeneruje ostrzeżenie CS0162, jak pokazano w poniższym przykładzie:
// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
System.Console.WriteLine("I'll never write anything."); //CS0162
}
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz sekcję Instrukcje specyfikacji języka C#.