Příkazy (Průvodce programováním v C#)

Akce, které program přijímá, jsou vyjádřeny v příkazech. Mezi běžné akce patří deklarace proměnných, přiřazování hodnot, volání metod, smyčky přes kolekce a větvení do jednoho nebo jiného bloku kódu v závislosti na dané podmínce. Pořadí, ve kterém se příkazy spouštějí v programu, se nazývá tok řízení nebo tok provádění. Tok řízení se může při každém spuštění programu lišit v závislosti na tom, jak program reaguje na vstup, který obdrží v době běhu.

Příkaz se může skládat z jediného řádku kódu, který končí středníkem, nebo řadou jednoduchých příkazů v bloku. Blok příkazu je uzavřený v {} závorkách a může obsahovat vnořené bloky. Následující kód ukazuje dva příklady jednoduchých řádků a blok víceřádkových příkazů:

    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 příkazů

V následující tabulce jsou uvedeny různé typy příkazů v jazyce C# a jejich přidružená klíčová slova s odkazy na témata, která obsahují další informace:

Kategorie Klíčová slova a poznámky jazyka C#
Příkazy deklarace Příkaz deklarace zavádí novou proměnnou nebo konstantu. Deklarace proměnné může volitelně přiřadit hodnotu proměnné. V deklaraci konstanty je vyžadováno přiřazení.
Příkazy výrazu Příkazy výrazů, které počítají hodnotu, musí ukládat hodnotu v proměnné.
Příkazy výběru Příkazy výběru umožňují vytvořit větev do různých oddílů kódu v závislosti na jedné nebo více zadaných podmínkách. Další informace najdete v následujících tématech:
Příkazy iterace Příkazy iterace umožňují cyklicky procházet kolekcemi, jako jsou pole, nebo provádět stejnou sadu příkazů opakovaně, dokud není splněna zadaná podmínka. Další informace najdete v následujících tématech:
Jump – příkazy Příkazy skoku přenášejí řízení na jiný oddíl kódu. Další informace najdete v následujících tématech:
Příkazy zpracování výjimek Příkazy zpracování výjimek umožňují bezproblémové obnovení z mimořádných podmínek, ke kterým dojde v době běhu. Další informace najdete v následujících tématech:
Zaškrtnuto a nezaškrtnuto Zaškrtnuté a nezaškrtnuté příkazy umožňují určit, jestli numerické operace můžou způsobit přetečení, pokud je výsledek uložený v proměnné, která je moc malá pro uložení výsledné hodnoty. Další informace naleznete v tématu checked a unchecked.
awaitPříkaz Pokud označíte metodu pomocí modifikátoru Async , můžete použít operátor await v metodě. Když ovládací prvek dosáhne await výrazu v asynchronní metodě, ovládací prvek se vrátí volajícímu a průběh v metodě je pozastaven, dokud není dokončen očekávaný úkol. Po dokončení úlohy může provádění pokračovat v metodě.

Jednoduchý příklad naleznete v části metody"asynchronní metody". Další informace naleznete v tématu asynchronní programování s Async a await.
yield returnPříkaz Iterátor provádí vlastní iteraci v kolekci, jako je například seznam nebo pole. Iterátor používá příkaz yield return k vrácení každého elementu v jednom okamžiku. Při yield return dosažení příkazu je aktuální umístění v kódu zapamatovatelné. Spuštění je restartováno z tohoto umístění při příštím volání iterátoru.

Další informace najdete v tématu iterátory.
fixedPříkaz Příkaz fixed brání systému uvolňování paměti v přemístění pohyblivé proměnné. Další informace naleznete v tématu fixed.
lockPříkaz Příkaz lock umožňuje omezit přístup k blokům kódu pouze na jedno vlákno v jednom okamžiku. Další informace najdete v tématu Lock.
Příkazy s popiskem Příkazu můžete předat popisek a potom pomocí klíčového slova goto přejít na příkaz s popiskem. (Podívejte se na příklad v následujícím řádku.)
Prázdný příkaz Prázdný příkaz se skládá z jednoho středníku. Nedělá nic a lze ho použít na místech, kde je vyžadován příkaz, ale není nutné provádět žádnou akci.

Příkazy deklarace

Následující kód ukazuje příklady deklarací proměnných s a bez počátečního přiřazení a konstantní deklarace s nezbytnou inicializací.

// Variable declaration statements.
double area;
double radius = 2;

// Constant declaration statement.
const double pi = 3.14159;

Příkazy výrazu

Následující kód ukazuje příklady příkazů výrazu, včetně přiřazení, vytvoření objektu s přiřazením a volání 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>();

Prázdný příkaz

Následující příklady znázorňují dva způsoby použití prázdného příkazu:

void ProcessMessages()
{
    while (ProcessMessage())
        ; // Statement needed here.
}

void F()
{
    //...
    if (done) goto exit;
//...
exit:
    ; // Statement needed here.
}

Vložené příkazy

Některé příkazy, například příkazy iterace, vždy mají vložený příkaz, který je následuje. Tento vložený příkaz může být buď jeden příkaz, nebo více příkazů uzavřených {} závorkami v bloku příkazu. I samostatné vložené příkazy mohou být uzavřeny v {} závorkách, jak je znázorněno v následujícím příkladu:

// 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);

Vložený příkaz, který není uzavřen v {} závorkách, nemůže být příkaz deklarace ani příkaz s popiskem. To je znázorněno v následujícím příkladu:

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

Chcete-li opravit chybu, vložte vložený příkaz do bloku.

if (b == true)
{
    // OK:
    System.DateTime d = System.DateTime.Now;
    System.Console.WriteLine(d.ToLongDateString());
}

Vnořené bloky příkazů

Bloky příkazu mohou být vnořené, jak je znázorněno v následujícím kódu:

foreach (string s in System.IO.Directory.GetDirectories(
    System.Environment.CurrentDirectory))
{
    if (s.StartsWith("CSharp"))
    {
        if (s.EndsWith("TempFolder"))
        {
            return s;
        }
    }
}
return "Not found.";

Nedosažitelné příkazy

Pokud kompilátor určí, že tok řízení nemůže nikdy dosáhnout konkrétního příkazu za žádných okolností, vytvoří upozornění CS0162, jak je znázorněno v následujícím příkladu:

// An over-simplified example of unreachable code.
const int val = 5;
if (val < 4)
{
    System.Console.WriteLine("I'll never write anything."); //CS0162
}

specifikace jazyka C#

Další informace naleznete v části příkazy specifikace jazyka C#.

Viz také