Prohlídka jazyka C#

Jazyk C# je nejoblíbenějším jazykem pro platformu .NET, bezplatné, multiplatformní opensourcové vývojové prostředí. Programy jazyka C# se můžou spouštět na mnoha různých zařízeních, od zařízení Internetu věcí (IoT) až po cloud a všude mezi sebou. Můžete psát aplikace pro telefony, stolní počítače a přenosné počítače a servery.

Jazyk C# je multiplatformní jazyk pro obecné účely, který vývojářům umožňuje produktivní práci při psaní vysoce výkonného kódu. S miliony vývojářů je jazyk C# nejoblíbenějším jazykem .NET. Jazyk C# má širokou podporu v ekosystému a všech úlohách .NET. Na základě objektově orientovaných principů zahrnuje mnoho funkcí z jiných paradigmat, nikoli z nejméně funkčního programování. Funkce nízké úrovně podporují scénáře vysoké efektivity bez psaní nebezpečného kódu. Většina modulů runtime a knihoven .NET je napsaná v jazyce C# a pokroky v jazyce C# často využívají všechny vývojáře .NET.

Hello World

Program "Hello, World" se tradičně používá k zavedení programovacího jazyka. Tady je v jazyce C#:

// This line prints "Hello, World" 
Console.WriteLine("Hello, World");

Řádek začínající // na jednom řádku je komentář s jedním řádkem. Komentáře s jedním řádkem // jazyka C# začínají a pokračujte na konec aktuálního řádku. Jazyk C# také podporuje víceřádkové komentáře. Víceřádkové komentáře začínají /* a končí na */. Metoda WriteLineConsole třídy, která je v System oboru názvů, vytvoří výstup programu. Tato třída je poskytována standardními knihovnami tříd, které se ve výchozím nastavení automaticky odkazují v každém programu jazyka C#.

Předchozí příklad ukazuje jednu formu programu "Hello, World", která používá příkazy nejvyšší úrovně. Starší verze jazyka C# vyžadovaly definování vstupního bodu programu v metodě. Tento formát je stále platný a uvidíte ho v mnoha existujících ukázkách jazyka C#. Měli byste být obeznámeni s tímto formulářem, jak je znázorněno v následujícím příkladu:

using System;

class Hello
{
    static void Main()
    {
        // This line prints "Hello, World" 
        Console.WriteLine("Hello, World");
    }
}

Tato verze zobrazuje stavební bloky, které používáte ve svých programech. Program "Hello, World" začíná direktivou using , která odkazuje na System obor názvů. Obory názvů poskytují hierarchický způsob uspořádání programů a knihoven jazyka C#. Obory názvů obsahují typy a další obory názvů – například System obor názvů obsahuje mnoho typů, jako Console je například třída odkazovaná v programu, a mnoho dalších oborů názvů, například IO a Collections. Direktiva using , která odkazuje na daný obor názvů, umožňuje nekvalifikované použití typů, které jsou členy tohoto oboru názvů. Vzhledem k direktivě using může program používat Console.WriteLine jako zkratku pro System.Console.WriteLine. V předchozím příkladu byl tento obor názvů implicitně zahrnutý.

Třída Hello deklarovaná programem "Hello, World" má jeden člen, metodu s názvem Main. Metoda Main je deklarována modifikátorem static . I když metody instance mohou odkazovat na konkrétní nadřazenou instanci objektu pomocí klíčového slova this, statické metody pracují bez odkazu na konkrétní objekt. Podle konvence platí, že pokud neexistují žádné příkazy nejvyšší úrovně, statická metoda pojmenovaná Main slouží jako vstupní bod programu jazyka C#.

Oba formuláře vstupních bodů vytvářejí ekvivalentní kód. Při použití příkazů nejvyšší úrovně kompilátor syntetizuje obsahující třídu a metodu pro vstupní bod programu.

Tip

Příklady v tomto článku vám poskytnou první pohled na kód jazyka C#. Některé ukázky můžou zobrazovat prvky jazyka C#, které neznáte. Až budete připraveni se naučit C#, začněte s našimi kurzy pro začátečníky nebo se ponořte do odkazů v jednotlivých částech. Pokud máte zkušenosti s Javou, JavaScriptem, TypeScriptem nebo Pythonem, přečtěte si naše tipy, které vám pomůžou najít informace, které potřebujete k rychlému učení jazyka C#.

Známé funkce jazyka C#

Jazyk C# je dostupný pro začátečníky, ale nabízí pokročilé funkce pro zkušené vývojáře, kteří píší specializované aplikace. Můžete být produktivní rychle. Můžete se dozvědět více specializované techniky, jak je potřebujete pro své aplikace.

Aplikace jazyka C# využívají automatickou správu paměti modulu runtime .NET. Aplikace jazyka C# také používají rozsáhlé knihovny modulu runtime poskytované sadou .NET SDK. Některé komponenty jsou nezávislé na platformě, jako jsou knihovny systému souborů, kolekce dat a matematické knihovny. Jiné jsou specifické pro jednu úlohu, jako jsou webové knihovny ASP.NET Core nebo knihovna uživatelského rozhraní .NET MAUI. Bohatý ekosystém Open Source na NuGet rozšiřuje knihovny, které jsou součástí modulu runtime. Tyto knihovny poskytují ještě více komponent, které můžete použít.

Jazyk C# je v sadě jazyků jazyka C. Syntaxe jazyka C# je známá, pokud jste použili jazyk C, C++, JavaScript nebo Java. Stejně jako všechny jazyky v rodině C definují středníky (;) konec příkazů. V identifikátorech jazyka C# se rozlišují malá a velká písmena. Jazyk C# má stejné použití složených závorek a příkazů ovládacích prvků jako {ifelse a switch, a konstruktorů smyček jako fora while.} Jazyk C# má foreach také příkaz pro libovolný typ kolekce.

Jazyk C# je jazyk silného typu. Každá proměnná, kterou deklarujete, má typ známý v době kompilace. Kompilátor nebo nástroje pro úpravy vám řeknou, jestli tento typ používáte nesprávně. Tyto chyby můžete opravit před spuštěním programu. Základní datové typy jsou integrované do jazyka a modulu runtime: typy hodnot jako int, double, charodkazové typy jako string, pole a další kolekce. Při psaní programů vytváříte vlastní typy. Tyto typy mohou být struct typy hodnot nebo class typy, které definují objektově orientované chování. Modifikátor můžete přidat record do obou struct typů class , aby kompilátor syntetizoval kód pro porovnání rovnosti. Můžete také vytvořit interface definice, které definují kontrakt nebo sadu členů, které typ implementuje toto rozhraní musí poskytnout. Můžete také definovat obecné typy a metody. Obecné typy používají parametry typu k zadání zástupného symbolu pro skutečný typ při použití.

Při psaní kódu definujete funkce, označované také jako metody, jako členy struct a class typy. Tyto metody definují chování vašich typů. Metody mohou být přetíženy s různým počtem nebo typy parametrů. Metody můžou volitelně vrátit hodnotu. Kromě metod mohou mít typy jazyka C# vlastnosti, což jsou datové prvky založené na funkcích označovaných jako přístupové objekty. Typy jazyka C# mohou definovat události, které umožňují typu upozorňovat odběratele na důležité akce. Jazyk C# podporuje objektově orientované techniky, jako je dědičnost a polymorfismus pro class typy.

Aplikace v jazyce C# používají výjimky k hlášení a zpracování chyb. Tento postup znáte, pokud jste použili C++ nebo Java. Kód vyvolá výjimku, když nemůže udělat to, co bylo zamýšleno. Jiný kód, bez ohledu na to, kolik úrovní zásobníku volání může volitelně obnovit pomocí try - catch bloku.

Výrazné funkce jazyka C#

Některé prvky jazyka C# můžou být méně známé. Jazykový integrovaný dotaz (LINQ) poskytuje běžnou syntaxi založenou na vzorech pro dotazování nebo transformaci jakékoli kolekce dat. LINQ sjednocuje syntaxi pro dotazování kolekcí v paměti, strukturovaných dat, jako jsou XML nebo JSON, databázové úložiště a dokonce i cloudová datová rozhraní API. Naučíte se jednu sadu syntaxe a můžete vyhledávat a manipulovat s daty bez ohledu na jejich úložiště. Následující dotaz najde všechny studenty, jejichž průměr známek je větší než 3,5:

var honorRoll = from student in Students
                where student.GPA > 3.5
                select student;

Předchozí dotaz funguje pro mnoho typů úložiště reprezentovaných .Students Může se jednat o kolekci objektů, databázové tabulky, objektu blob cloudového úložiště nebo struktury XML. Stejná syntaxe dotazů funguje pro všechny typy úložišť.

Asynchronní programovací model založený na úlohách umožňuje psát kód, který čte, jako by běžel synchronně, i když běží asynchronně. Pomocí asyncawait klíčových slov popisuje metody, které jsou asynchronní, a když se výraz vyhodnotí asynchronně. Následující ukázka čeká na asynchronní webový požadavek. Po dokončení asynchronní operace vrátí metoda délku odpovědi:

public static async Task<int> GetPageLengthAsync(string endpoint)
{
    var client = new HttpClient();
    var uri = new Uri(endpoint);
    byte[] content = await client.GetByteArrayAsync(uri);
    return content.Length;
}

Jazyk C# také podporuje await foreach příkaz pro iteraci kolekce založené na asynchronní operaci, jako je stránkovací rozhraní API GraphQL. Následující ukázka čte data v blocích a vrací iterátor, který poskytuje přístup ke každému prvku, když je k dispozici:

public static async IAsyncEnumerable<int> ReadSequence()
{
    int index = 0;
    while (index < 100)
    {
        int[] nextChunk = await GetNextChunk(index);
        if (nextChunk.Length == 0)
        {
            yield break;
        }
        foreach (var item in nextChunk)
        {
            yield return item;
        }
        index++;
    }
}

Volající můžou kolekci iterovat pomocí await foreach příkazu:

await foreach (var number in ReadSequence())
{
    Console.WriteLine(number);
}

Jazyk C# poskytuje porovnávání vzorů. Tyto výrazy umožňují kontrolovat data a rozhodovat se na základě jejich charakteristik. Porovnávání vzorů poskytuje skvělou syntaxi pro tok řízení na základě dat. Následující kód ukazuje, jak lze metody logických operací a operací xor vyjádřit pomocí syntaxe porovnávání vzorů:

public static bool Or(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (true, false) => true,
        (false, true) => true,
        (false, false) => false,
    };

public static bool And(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (true, false) => false,
        (false, true) => false,
        (false, false) => false,
    };
public static bool Xor(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => false,
        (true, false) => true,
        (false, true) => true,
        (false, false) => false,
    };

Výrazy porovnávání vzorů se dají zjednodušit pomocí _ funkce catch pro libovolnou hodnotu. Následující příklad ukazuje, jak můžete zjednodušit a metodu:

public static bool ReducedAnd(bool left, bool right) =>
    (left, right) switch
    {
        (true, true) => true,
        (_, _) => false,
    };

V rámci ekosystému .NET můžete také používat Visual Studio nebo Visual Studio Code s jazykem C# DevKit. Tyto nástroje poskytují bohaté znalosti jazyka C#, včetně kódu, který píšete. Poskytují také možnosti ladění.