TOC

This article has been localized into Czech by the community.

Pokročilá témata:

Struktury (Struct)

Struktura C# je lehkou alternativou k třídě. Může dělat téměř to samé jako třída, ale použití struktury je méně "nákladné" než použití třídy. Důvod pro to je trochu technický, ale shrnuto, nové instance třídy jsou umístěny na haldě, zatímco nově vytvořené struktury jsou umístěny na zásobníku. Navíc nepracujete s odkazy na struktury, jako je tomu u tříd, ale místo toho pracujete přímo s instancí struktury. To také znamená, že když předáte struktuře funkci, je to hodnotou, místo odkazem. O tomto je více v kapitole o parametrech funkcí.

Takže byste měli používat struktury, když chcete reprezentovat jednodušší datové struktury, a zejména pokud víte, že jich budete vytvářet mnoho. Existuje mnoho příkladů v .NET frameworku, kde Microsoft použil struktury místo tříd, například struktury Point, Rectangle a Color.

Nejprve bych vám chtěl ukázat příklad použití struktury a poté budeme diskutovat o některých omezeních jejich používání místo tříd:

class Program
{
    static void Main(string[] args)
    {
        Car car;

        car = new Car("Blue");
        Console.WriteLine(car.Describe());

        car = new Car("Red");
        Console.WriteLine(car.Describe());

        Console.ReadKey();
    }
}

struct Car
{
    private string color;

    public Car(string color)
    {
        this.color = color;
    }

    public string Describe()
    {
        return "This car is " + Color;
    }

    public string Color
    {
        get { return color; }
        set { color = value; }
    }
}

Pozorný čtenář si všimne, že se jedná o přesně stejný příkladový kód, jaký byl použit v úvodu do tříd, kromě změny z třídy na strukturu. To ukazuje, jak si jsou oba koncepty podobné. Ale jak se liší, kromě technických detailů zmíněných na začátku této kapitoly?

Především pole nemohou mít inicializátory, což znamená, že nemůžete deklarovat člena takto:

private string color = "Blue";

Pokud deklarujete konstruktor, všechna pole musí být přiřazena před opuštěním konstruktoru. Struktura sice má výchozí konstruktor, ale jakmile se rozhodnete definovat svůj vlastní, zavazujete se inicializovat v něm všechna pole. To také znamená, že nemůžete deklarovat vlastní konstruktor bez parametrů - všechny konstruktory struktury musí mít alespoň jeden parametr. V našem výše uvedeném příkladu jsme skutečně přiřadili hodnotu poli color. Kdybychom to neudělali, kompilátor by si stěžoval.

Struktura nemůže dědit z jiných tříd nebo struktur a třídy nemohou dědit ze struktur. Struktura dědí z třídy Object, ale to je vše, co se týče dědičnosti a struktur. Podporují však rozhraní, což znamená, že vaše struktury mohou implementovat vlastní rozhraní.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!