Sdílet prostřednictvím


Vytváření typů v jazyce C#

V tomto kurzu se naučíte vytvářet typy v jazyce C#. Napíšete malé množství kódu, pak tento kód zkompilujete a spustíte. Tento kurz obsahuje řadu lekcí, které prozkoumávají různé typy typů v jazyce C#. Tyto lekce vás naučí základy jazyka C#.

Návod

Když blok fragmentu kódu obsahuje tlačítko Spustit, otevře se interaktivní okno nebo nahradí stávající kód v interaktivním okně. Pokud fragment kódu neobsahuje tlačítko Spustit, můžete kód zkopírovat a přidat ho do aktuálního interaktivního okna.

Předchozí kurzy pracovaly s textem a čísly. Řetězce a čísla jsou jednoduché typy: Každá z nich ukládá jednu jednu hodnotu. S tím, jak se vaše programy zvětšují, potřebujete pracovat s sofistikovanějšími datovými strukturami. Jazyk C# poskytuje různé typy typů, které můžete definovat, když potřebujete datové struktury s více poli, vlastnostmi nebo chováním. Pojďme se na tyto typy podívat.

Tuply

N-tice jsou seřazenou sekvencí hodnot s pevnou délkou. Každý prvek n-tice má typ a volitelný název. Následující kód deklaruje n-tici představující 2D bod. Výběrem tlačítka Spustit vložte následující kód do interaktivního okna a spusťte ho.

var pt = (X: 1, Y: 2);

var slope = (double)pt.Y / (double)pt.X;
Console.WriteLine($"A line from the origin to the point {pt} has a slope of {slope}.");

Návod

Při zkoumání jazyka C# (nebo libovolného programovacího jazyka) uděláte chyby při psaní kódu. Kompilátor tyto chyby najde a oznámí vám je. Pokud výstup obsahuje chybové zprávy, podívejte se pozorně na ukázkový kód a kód v interaktivním okně a podívejte se, co opravit. Toto cvičení vám pomůže naučit se strukturu kódu jazyka C#.

Můžete znovu přiřadit libovolného člena n-tice. Za existující kód přidejte následující kód do interaktivního okna. Výsledky zobrazíte opětovným stisknutím klávesy Spustit.

pt.X = pt.X + 5;
Console.WriteLine($"The point is now at {pt}.");

Pomocí výrazu with můžete také vytvořit novou n-tici, která je upravenou kopií originálu. Za kód, který už je v interaktivním okně, přidejte následující kód a stisknutím klávesy Spustit zobrazte výsledky:

var pt2 = pt with { Y = 10 };
Console.WriteLine($"The point 'pt2' is at {pt2}.");

Trojice pt2 obsahuje X hodnotu pt (6) a pt2.Y je 10.

N-tice jsou strukturální typy. Jinými slovy, typy tuplů nemají jména jako string nebo int. Typ n-tice je definován počtem členů, který se označuje jako arity, a typy těchto členů. Názvy členů jsou pro usnadnění přístupu. Můžete přiřadit n-tici k n-tici se stejnou aritou a typy, i když mají členové různé názvy. Následující kód můžete přidat za kód, který jste už napsali v interaktivním okně, a vyzkoušet ho:

var subscript = (A: 0, B: 0);
subscript = pt;
Console.WriteLine(subscript);

Proměnná subscript má dva členy, z nichž obě jsou celá čísla. Obě subscript a pt představují instance stejného typu n-tice: n-tice obsahující 2 int členy.

N-tice se snadno vytvářejí: Deklarujete více členů uzavřených v kulatých závorkách. Všechny následující deklarují různé n-tice různých arit a typů členů. Přidejte následující kód pro vytvoření nových typů n-tic:

var namedData = (Name: "Morning observation", Temp: 17, Wind: 4);
var person = (FirstName: "", LastName: "");
var order = (Product: "guitar picks", style: "triangle", quantity: 500, UnitPrice: 0.10m);

Tuply se dají snadno vytvořit, ale jejich možnosti jsou omezené. Typy n-tic nemají názvy, takže nemůžete přenést význam sadě hodnot. Typy n-tice nemůžou přidávat chování. Jazyk C# obsahuje další typy typů, které můžete vytvořit, když typ definuje chování.

Vytvoření typů záznamů

N-tice jsou skvělé pro situace, kdy chcete mít více hodnot ve stejné struktuře. Jsou odlehčené a dají se deklarovat, jak se používají. Během svého programu možná zjistíte, že v celém kódu používáte stejný typ n-tice. Pokud vaše aplikace pracuje v prostoru 2D grafu, může být běžné používání n-tic představujících body. Jakmile zjistíte, můžete deklarovat record typ, který tyto hodnoty ukládá, a poskytuje další možnosti. Následující ukázka kódu používá metodu Main představující vstupní bod pro program. Tímto způsobem můžete deklarovat record typ před vstupním bodem v kódu. Stisknutím tlačítka Spustit v následujícím kódu nahraďte stávající ukázku následujícím kódem.

Výstraha

Nekopírujte a nevkládejte. Aby bylo možné spustit následující ukázku, musí být interaktivní okno resetované. Pokud uděláte chybu, okno přestane reagovat a budete muset stránku aktualizovat, abyste mohli pokračovat.

Následující kód deklaruje a používá record typ k reprezentaci Pointa pak používá strukturu Point v Main metodě:

public record Point(int X, int Y);

public static void Main()
{
    Point pt = new Point(1, 1);
    var pt2 = pt with { Y = 10 };
    Console.WriteLine($"The two points are {pt} and {pt2}");
}

Deklarace record je jeden řádek kódu pro Point typ, který ukládá hodnoty X a Y ve vlastnostech jen pro čtení. Název Point použijete všude, kde tento typ používáte. Správně pojmenované typy, například Point, poskytují informace o tom, jak se typ používá. Tato Main metoda ukazuje, jak pomocí výrazu with vytvořit nový bod, který je upravenou kopií existujícího bodu. Řádek pt2 = pt with { Y = 10 } obsahujept2 stejné hodnoty jako pt s tím rozdílem, že Y je přiřazeno 10." Do jednoho with výrazu můžete přidat libovolný počet vlastností, které se mají změnit.

Předchozí record deklarace je jeden řádek kódu, který končí , ;stejně jako všechny příkazy jazyka C#. Chování typu record můžete přidat deklarováním členů. Člen záznamu může být funkce nebo více datových prvků. Členy typu jsou v deklaraci typu mezi { a } znaky. Nahraďte deklaraci záznamu, kterou jste vytvořili, následujícím kódem:

public record Point(int X, int Y)
{
    public double Slope() => (double)Y / (double)X;
}

Potom do Main metody přidejte následující kód za řádek obsahující with výraz:

double slope = pt.Slope();
Console.WriteLine($"The slope of {pt} is {slope}");

K n-tici jste přidali formalitu, která představuje hodnotu X a Y. Vytvořili jste ho tak record , že jste definovali pojmenovaný typ a zahrnuli člena pro výpočet sklonu. Typ record je zkratka pro record class: class Typ, který zahrnuje dodatečné chování. Typ můžete upravit Point tak, aby byl record struct také:

public record struct Point(int X, int Y)
{
    public double Slope() => (double) Y / (double) X;
}

record struct je typ struct, který zahrnuje dodatečné chování přidané ke všem typům record.

Typy struktur, tříd a rozhraní

Všechny pojmenované typy v jazyce C# jsou buď class nebo struct typy. A class je typ odkazu. A struct je typ hodnoty. Proměnné hodnotového typu ukládají obsah instance přímo na místě v paměti. Jinými slovy, record struct Point ukládá dvě celá čísla: X a Y. Proměnné typu odkazu ukládají odkaz nebo ukazatel na úložiště instance. Jinými slovy, record class Point uloží odkaz na blok paměti, který obsahuje hodnoty pro X a Y.

V praxi to znamená, že při přiřazení se zkopírují typy hodnot, ale kopie instance třídy je kopie odkazu. Zkopírovaný odkaz se týká stejné instance bodu se stejným úložištěm pro X a Y.

record Modifikátor dává kompilátoru pokyn, aby za vás napsal několik členů. Další informace najdete v článku o typech záznamů v části Základy.

Když deklarujete record typ, deklarujete, že váš typ by měl použít výchozí sadu chování pro porovnání rovnosti, přiřazení a kopírování instancí tohoto typu. Záznamy jsou nejlepší volbou, pokud je primární funkcí vašeho typu ukládání souvisejících dat. Při přidávání dalších chování zvažte použití struct nebo class typy bez modifikátoru record .

Použijete typy struct pro typy hodnot, když je potřeba sofistikovanější chování, ale primární odpovědností je ukládání hodnot. Použití class typů umožňuje využití objektově orientovaných idiomů, jako jsou zapouzdření, dědičnost a polymorfismus.

Můžete také definovat typy, interface které deklarují kontrakty chování, které musí implementovat různé typy. Oba typy struct a class mohou implementovat rozhraní.

Všechny tyto typy obvykle používáte ve větších programech a knihovnách. Po instalaci sady .NET SDK můžete tyto typy prozkoumat pomocí kurzů na třídách v části Základy.

Dokončili jste interaktivní kurz Vytvoření typů v jazyce C#. Můžete vybrat odkaz Větve a smyčky, abyste zahájili další interaktivní kurz, nebo můžete navštívit web .NET a stáhnout si .NET SDK, vytvořit projekt na svém počítači a pokračovat v kódování. V části Další kroky se vrátíte k těmto kurzům.

Další informace o typech v jazyce C# najdete v následujících článcích: