Přehled tříd, struktur a záznamů v jazyce C #

V jazyce C# je definice typu – třídy, struktury nebo záznamu – podobná podrobnému plánu, který určuje, co může typ udělat. Objekt je v podstatě blok paměti, který byl přidělen a nakonfigurován podle podrobného plánu. Tento článek obsahuje přehled těchto podrobných plánů a jejich funkcí. Další článek v této řadě představuje objekty.

Zapouzdření

Zapouzdření se někdy označuje jako první pilíř nebo princip objektově orientovaného programování. Třída nebo struktura může určit, jak přístupný každý z jejích členů je kód mimo třídu nebo strukturu. Metody a proměnné, které nejsou určeny k použití mimo třídu nebo sestavení, mohou být skryté, aby se omezil potenciál kódování chyb nebo škodlivých zneužití. Další informace najdete v kurzu programování orientovaného na objekty .

Členové

Členové typu zahrnují všechny metody, pole, konstanty, vlastnosti a události. V jazyce C# neexistují žádné globální proměnné ani metody, protože existují v některých jiných jazycích. I vstupní bod Main programu musí být metoda deklarována v rámci třídy nebo struktury (implicitně při použití příkazů nejvyšší úrovně).

Následující seznam obsahuje všechny různé druhy členů, které mohou být deklarovány ve třídě, struktuře nebo záznamu.

  • Pole
  • Konstanty
  • Vlastnosti
  • Metody
  • Konstruktory
  • Události
  • Finalizační metody
  • Indexery
  • Operátory
  • Vnořené typy

Další informace najdete v tématu Členové.

Usnadnění

Některé metody a vlastnosti se mají volat nebo přistupovat z kódu mimo třídu nebo strukturu, označované jako klientský kód. Jiné metody a vlastnosti mohou být pouze pro použití v samotné třídě nebo struktuře. Je důležité omezit přístupnost kódu tak, aby ho mohl kontaktovat jenom zamýšlený klientský kód. Pomocí následujících modifikátorů přístupu určíte, jak jsou typy a jejich členové přístupné pro klientský kód:

Výchozí přístupnost je private.

Dědičnost

Třídy (ale ne struktury) podporují koncept dědičnosti. Třída, která je odvozena z jiné třídy, označovaná jako základní třída, automaticky obsahuje všechny veřejné, chráněné a interní členy základní třídy s výjimkou jejích konstruktorů a finalizátorů.

Třídy mohou být deklarovány jako abstraktní, což znamená, že jedna nebo více jejich metod nemá žádnou implementaci. I když abstraktní třídy nelze vytvořit instanci přímo, mohou sloužit jako základní třídy pro jiné třídy, které poskytují chybějící implementaci. Třídy lze také deklarovat jako zapečetěné , aby se zabránilo dědění jiných tříd z nich.

Další informace najdete v tématu Dědičnost a polymorfismus.

Rozhraní

Třídy, struktury a záznamy můžou implementovat více rozhraní. Implementace z rozhraní znamená, že typ implementuje všechny metody definované v rozhraní. Další informace najdete v tématu Rozhraní.

Obecné typy

Třídy, struktury a záznamy lze definovat pomocí jednoho nebo více parametrů typu. Kód klienta zadá typ, když vytvoří instanci typu. Třída v System.Collections.Generic oboru názvů je například List<T> definována jedním parametrem typu. Klientský kód vytvoří instanci nebo List<string>List<int> určí typ, který bude seznam obsahovat. Další informace najdete v tématu Obecné typy.

Statické typy

Třídy (ale ne struktury nebo záznamy) lze deklarovat jako static. Statická třída může obsahovat pouze statické členy a nedá se vytvořit instanci s klíčovým slovem new . Při načtení programu se do paměti načte jedna kopie třídy a její členové jsou přístupní prostřednictvím názvu třídy. Třídy, struktury a záznamy můžou obsahovat statické členy. Další informace najdete v tématu Statické třídy a členy statické třídy.

Vnořené typy

Třída, struktura nebo záznam lze vnořit do jiné třídy, struktury nebo záznamu. Další informace najdete v tématu Vnořené typy.

Částečné typy

Můžete definovat část třídy, struktury nebo metody v jednom souboru kódu a další části v samostatném souboru kódu. Další informace najdete v tématu Částečné třídy a metody.

Inicializátory objektů

Můžete vytvořit instanci a inicializovat třídy nebo objekty struktury a kolekce objektů přiřazením hodnot k jeho vlastnostem. Další informace naleznete v tématu Jak inicializovat objekty pomocí inicializátoru objektů.

Anonymní typy

V situacích, kdy není vhodné nebo nutné vytvořit pojmenovanou třídu, kterou používáte anonymní typy. Anonymní typy jsou definovány jejich pojmenovanými datovými členy. Další informace najdete v tématu Anonymní typy.

Metody rozšíření

Třídu můžete rozšířit bez vytvoření odvozené třídy vytvořením samostatného typu. Tento typ obsahuje metody, které lze volat, jako by patřily do původního typu. Další informace najdete v tématu Metody rozšíření).

Implicitně typované lokální proměnné

V rámci třídy nebo metody struktury můžete pomocí implicitního psaní dát kompilátoru pokyn k určení typu proměnné v době kompilace. Další informace najdete v tématu var (referenční dokumentace jazyka C#).

Záznamy

C# 9 zavádí record typ, odkazový typ, který můžete vytvořit místo třídy nebo struktury. Záznamy jsou třídy s předdefinované chování pro zapouzdření dat v neměnných typech. C# 10 zavádí record struct typ hodnoty. Záznam (nebo record classrecord struct) poskytuje následující funkce:

  • Stručná syntaxe pro vytvoření typu odkazu s neměnnými vlastnostmi
  • Rovnost hodnot Dvě proměnné typu záznamu jsou stejné, pokud mají stejný typ, a pokud jsou pro každé pole hodnoty v obou záznamech stejné. Třídy používají rovnost odkazu: dvě proměnné typu třídy jsou stejné, pokud odkazují na stejný objekt.
  • Stručná syntaxe pro nedestruktivní mutaci. Výraz with umožňuje vytvořit novou instanci záznamu, která je kopií existující instance, ale se změněnými zadanými hodnotami vlastností.
  • Integrované formátování pro zobrazení Metoda ToString vytiskne název typu záznamu a názvy a hodnoty veřejných vlastností.
  • Podpora hierarchií dědičnosti ve třídách záznamů Třídy záznamů podporují dědičnost. Struktury záznamů nepodporují dědičnost.

Další informace najdete v tématu Záznamy.

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.