Udostępnij za pośrednictwem


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 zawarty w nawiasach klamrowych {} 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 #{counter} is {radius}. Circumference = {circumference:N2}");

            // 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
*/

Rodzaje stwierdzeń

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#
Deklaracje Deklaracja wprowadza nową zmienną lub stałą. Deklaracja zmiennej może opcjonalnie przypisać wartość do zmiennej. W deklaracji stałej przypisanie jest wymagane.
Instrukcje wyrażeniowe Instrukcje wyrażeń, które obliczają wartość, muszą przechowywać wartość w zmiennej.
Instrukcje wyboru Instrukcje wyboru pozwalają na rozgałęzienie do różnych sekcji kodu w zależności od co najmniej jednego określonego warunku. 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 Instrukcje skoku przenoszą kontrolę 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ą sprawne radzenie sobie z wyjątkowymi sytuacjami występującymi w czasie wykonania. 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 sterowanie osiąga wyrażenie await w metodzie asynchronicznej, sterowanie powraca do wywołującego, a postęp w metodzie jest zawieszony, aż oczekiwane zadanie zostanie ukończone. 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, zapoznaj się z Asynchronicznym programowaniem z async i await.
Instrukcja yield return Iterator wykonuje niestandardowe iterowanie w kolekcji, jak lista lub tablica. Iterator używa instrukcji yield return, aby zwrócić każdy element jeden po drugim. Po osiągnięciu instrukcji yield return 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 Instrukcja 'fixed' zapobiega przenoszeniu zmiennej przez zbieracz śmieci. Aby uzyskać więcej informacji, zobacz stałe.
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 wyrażenie jest wymagane, ale nie trzeba wykonywać żadnych działań.

Instrukcje deklaracyjne

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 dotyczące 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ą wbudowaną instrukcję następującą po nich. Ta osadzona instrukcja może być pojedynczą instrukcją lub wieloma instrukcjami ujętymi {} w nawiasy w bloku instrukcji. Nawet instrukcje jednowierszowe osadzone 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 nawiasach {}, nie może być instrukcją deklaracji ani instrukcją z etykietą. Jest to pokazane w poniższym przykładzie:

if(pointB == true)
    //Error CS1023:
    int radius = 5;

Umieść osadzone wyrażenie 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 sterowania nigdy nie dotrze do określonej instrukcji w żadnych okolicznościach, wygeneruje ostrzeżenie CS0162, co 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ę Instrukcjespecyfikacji języka C#.

Zobacz też