Sdílet prostřednictvím


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, především funkcionální 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.

Jazyk C# je v sadě jazyků jazyka C. Syntaxe jazyka C# je známá, pokud jste použili jazyk C, C++, JavaScript, TypeScript nebo Java. Podobně jako C a C++ definují středníky (;) konec příkazů. V identifikátorech jazyka C# se rozlišují malá a velká písmena. Jazyk C# používá složené závorky stejně jako {, }, příkazy řízení jako if, else a switch, a cykly jako for a while. Také jazyk C# má foreach příkaz pro libovolný typ kolekce.

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í // je komentář na jednom řádku. Jednořádkové komentáře jazyka C# začínají // a pokračují až 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 WriteLine třídy Console, která je v jmenném prostoru System, 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#. Jiný formulář programu vyžaduje deklaraci obsahující třídy a metody pro vstupní bod programu. Kompilátor syntetizuje tyto prvky při použití příkazů nejvyšší úrovně.

Tento alternativní formát je stále platný a obsahuje mnoho základních konceptů ve všech programech jazyka C#. Mnoho existujících ukázek jazyka C# používá následující ekvivalentní formát:

using System;
namespace TourOfCsharp;

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

Předchozí 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#. Jmenné prostory obsahují typy a další jmenné prostory – například jmenný prostor System obsahuje mnoho typů, jako je třída Console uvedená v programu, a mnoho dalších typů a jmenných prostorů, 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 Program 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#. Třída obsahující metodu Main je obvykle pojmenována Program.

Návod

Příklady v tomto článku vám poskytnou první pohled na kód jazyka C#. Některé ukázky můžou zobrazit 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 potřebné 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.

C# je silně typovaný jazyk. 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 record můžete přidat buď k typům struct, nebo k typům class, aby kompilátor syntetizoval kód pro porovnání rovnosti. Můžete také vytvořit interface definice, které definují kontrakt nebo sadu členů, jež musí poskytnout typ implementující toto rozhraní. Můžete také definovat obecné typy a metody. Obecné typy používají parametry typu k poskytnutí 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 typů struct a class. 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 je známý, pokud jste použili jazyk C++ nebo Javu. Kód vyvolá výjimku, když nemůže udělat to, co bylo zamýšleno. Jiný kód, bez ohledu na počet úrovní zásobníku volání, se 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é.

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 pro logické operace "a", "nebo" a "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 metodu a:

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

Předchozí příklady také deklarují n-tice, jednoduché datové struktury. Řazená kolekce členů je seřazená posloupnost hodnot s pevnou délkou s volitelnými názvy a jednotlivými typy. Sekvenci uzavřete mezi znaky ( a ). (left, right) deklarace definuje n-tici se dvěma logickými hodnotami: left a right. Každé rameno přepínače deklaruje hodnotu n-tice, například (true, true). Trojice poskytují pohodlnou syntaxi pro deklaraci jedné proměnné obsahující více hodnot.

Výrazy kolekce poskytují společnou syntaxi pro zadání hodnot kolekce. Zapisujete hodnoty nebo výrazy mezi [ a ] znaky a kompilátor tento výraz převede na požadovaný typ kolekce:

int[] numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
List<string> names = ["Alice", "Bob", "Charlie", "David"];

IEnumerable<int> moreNumbers = [.. numbers, 11, 12, 13];
IEnumerable<string> empty = [];

Předchozí příklad ukazuje různé typy kolekcí, které lze inicializovat pomocí výrazů kolekce. Jeden příklad používá [] prázdný výraz kolekce k deklaraci prázdné kolekce. Další příklad používá ..rozšíření elementu k rozšíření kolekce a přidání všech jejích hodnot do daného výrazu kolekce.

Výrazy indexu a rozsahu můžete použít k načtení jednoho nebo více prvků z indexovatelné kolekce:

string second = names[1]; // 0-based index
string last = names[^1]; // ^1 is the last element
int[] smallNumbers = numbers[0..5]; // 0 to 4

Index ^ označuje z konce místo od začátku. Prvek ^0 označuje místo za koncem kolekce, takže ^1 je posledním prvkem. Výraz .. oblasti označuje rozsah prvků, které se mají zahrnout. Rozsah začíná prvním indexem a zahrnuje všechny prvky až do, ale ne včetně elementu na posledním indexu.

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

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