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#.

Zobacz też