Sdílet prostřednictvím


Třídy a struktury (Průvodce programováním v C#)

Třídy a struktury jsou dvě základní konstrukce z CTS (common type system) v rozhraní .NET Framework.Každá je v podstatě datová struktura, která zapouzdřuje sadu dat a chování, která patří k sobě jako logická jednotka.Data a chování jsou členy třídy nebo struktury a zahrnují metody, vlastnosti, události atd., jak je uvedeno dále v tomto tématu.

Deklarace třídy nebo struktury je jako matrice, která se používá k vytváření instancí nebo objektů při spuštění.Pokud definujete třídu nebo strukturu nazvanou Person, Person je název typu.Pokud deklarujete a inicializujete proměnnou p typu Person, p je označováno jako objekt nebo instance Person.Můžete vytvořit více instancí stejného typu Person a každá instance může mít různé hodnoty vlastností a polí.

Třída je typ odkazu.Při vytvoření objektu třídy bude proměnná, ke které je přiřazen objekt, obsahovat pouze odkaz na tuto paměť.Při odkazu na objekt je přiřazen nové proměnné, nová proměnná odkazuje na původní objekt.Změny provedené prostřednictvím jedné proměnné se projeví v jiné proměnné, protože obě odkazují na stejná data.

Struktura je typ hodnoty.Při vytvoření struktury bude proměnná, ke které je přiřazena struktura, obsahovat skutečná data.Když je struktura přiřazena nové proměnné, zkopíruje se.Nové proměnné a původní proměnné proto obsahují dvě oddělené kopie stejných dat.Změny provedené v jedné kopii neovlivní druhou kopii.

Obecně třídy slouží k modelování složitějšího chování nebo dat, která mají být změněna po vytvoření objektu třídy.Struktury jsou nejvhodnější pro malé datové struktury, které obsahují především data, které nemáte v úmyslu po vytvoření struktury měnit.

Další informace naleznete v tématu Třídy (Průvodce programováním v C#)m Objekty (Průvodce programováním v C#) a Struktury (Průvodce programováním v C#).

Příklad

V následujícím příkladu je výraz MyCustomClass definován pomocí tří členů na nejvyšší úrovni oboru názvů ProgrammingGuide.Instance (objekt) třídy MyCustomClass je vytvořena v metodě Main ve třídě Program a metody a vlastnosti objektu jsou přístupné pomocí zápisu s tečkou.

namespace ProgrammingGuide
    {
        // Class definition. 
        public class MyCustomClass
        {
            // Class members: 
            // Property. 
            public int Number { get; set; }

            // Method. 
            public int Multiply(int num)
            {
                return num * Number;
            }

            // Instance Constructor. 
            public MyCustomClass()
            {
                Number = 0;
            }
        }
        // Another class definition. This one contains 
        // the Main method, the entry point for the program. 
        class Program
        {
            static void Main(string[] args)
            {
                // Create an object of type MyCustomClass.
                MyCustomClass myClass = new MyCustomClass();

                // Set the value of a public property.
                myClass.Number = 27;

                // Call a public method. 
                int result = myClass.Multiply(4);
            }
        }
    }

Zapouzdření

Zapouzdření je někdy označováno jako první pilíř nebo princip objektově orientovaného programování.Podle principu zapouzdření může třída nebo struktura určit, jak přístupný je každý z jejích členů pro kód mimo třídu nebo strukturu.Metody a proměnné, které nejsou určeny k použití mimo třídy nebo sestavení, lze skrýt a omezit tak potenciální vznik chyb v kódování nebo škodlivých exploitů.

Další informace o třídách naleznete v části Třídy (Průvodce programováním v C#) a Objekty (Průvodce programováním v C#).

Členy

Všechny metody, pole, konstanty, vlastnosti a události musí být deklarovány v rámci typu; nazývají se členy typu.V jazyce C# nejsou žádné globální proměnné ani metody jako v některých jiných jazycích.Dokonce i vstupní bod programu, metoda Main, musí být deklarován v rámci třídy nebo struktury.Následující seznam obsahuje všechny různé druhy členů, které mohou být deklarovány ve třídě nebo struktuře.

Přístupnost

Některé metody a vlastnosti jsou určeny jako cíl volání nebo přístupu z kódu mimo vaši třídu nebo strukturu a jsou známé jako klientský kód.Další metody a vlastnosti mohou být určeny pouze pro použití přímo ve třídě nebo struktuře.Je důležité omezit dostupnost vašeho kódu tak, aby jej mohl využívat pouze zamýšlený klientský kód.Určíte, jak přístupné jsou vaše typy a členové pro klientský kód, pomocí modifikátorů přístupu veřejné, chráněné, vnitřní, protected internal a soukromé.Výchozí dostupnost je private.Další informace naleznete v tématu Modifikátory přístupu (Průvodce programováním v C#).

Dědičnost

Třídy (ale ne struktury) podporují koncept dědičnosti.Třída, která je odvozena od jiné třídy (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 destruktorů.Další informace naleznete v tématu Dědičnost (Průvodce programováním v C#) a Polymorfismus (Průvodce programováním v C#).

Třídy mohou být deklarovány jako abstraktní, což znamená, že jedna nebo více z jejich metod nemá implementaci.Přestože instance abstraktních tříd nelze vytvářet přímo, mohou sloužit jako základní třídy pro další třídy, které tuto chybějící implementaci poskytují.Třídy lze také deklarovat jako uzavřené a zabránit tak jejich dědění jinými třídami.Další informace naleznete v tématu Abstraktní a uzavřené třídy a jejich členové (Průvodce programováním v C#).

Rozhraní

Třídy a struktury mohou dědit více rozhraní.Dědění z rozhraní znamená, že typ implementuje všechny metody definované v rozhraní.Další informace naleznete v tématu Rozhraní (Průvodce programováním v C#).

Obecné typy

Třídy a struktury lze definovat s jedním nebo více parametry typu.Klientský kód poskytuje typ při vytváření instance daného typu.Například třída List ve oboru názvů System.Collections.Generic je definovaná s jedním parametrem typu.Klientský kód vytvoří instanci List<string> nebo List<int> k určení typu, který bude obsahovat seznam.Další informace naleznete v tématu Obecné typy (Průvodce programováním v C#).

Statické typy

Třídy (ale ne struktury) mohou být deklarovány jako statické.Statická třída může obsahovat pouze statické členy a nelze pro ni vytvořit instanci pomocí klíčového slova new.Jedna kopie třídy se načte do paměti v momentě načtení programu a její členové budou přístupní prostřednictvím názvu třídy.Třídy i struktury mohou obsahovat statické členy.Další informace naleznete v tématu Statické třídy a jejich členové (Průvodce programováním v C#).

Vnořené typy

Třída nebo struktura může být vnořena do jiné třídy nebo struktury.Další informace naleznete v tématu Nested Types.

Částečné typy

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

Inicializátory objektu

Můžete konkretizovat a inicializovat třídu nebo strukturu objektů a kolekce objektů bez explicitního volání jejich konstruktoru.Další informace naleznete v tématu Inicializátory objektu a kolekce (Průvodce programováním v C#).

Anonymní typy

V situacích, kde není vhodné nebo nezbytné vytvořit třídu s názvem, například když plníte seznam datovými strukturami, které nemusí přetrvat ani být předány jiné metodě, použijte anonymní typy.Další informace naleznete v tématu Anonymní typy (Průvodce programováním v C#).

Metody rozšíření

Můžete „rozšířit“ třídu bez vytvoření odvozené třídy vytvořením samostatného typu, jejíž metody lze volat, jakoby příslušely k původnímu typu.Další informace naleznete v tématu Metody rozšíření (Průvodce programováním v C#).

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

V rámci třídy nebo metody struktury můžete zadávat implicitní instrukce kompilátoru k určení správného typu v době kompilace.Další informace naleznete v tématu Implicitně typované lokální proměnné (Průvodce programováním v C#).

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

Viz také

Koncepty

Průvodce programováním v C#