TOC

This article has been localized into Czech by the community.

Třídy:

Statičtí členové

Jak jsme viděli v předchozí kapitole, obvyklým způsobem, jak komunikovat s třídou, je vytvořit novou instanci třídy a následně pracovat na výsledném objektu. Ve většině případů je to to o čem třídy jsou- o schopnost vytvářet více kopií stejné třídy a následně je různým způsobem používat. V některých případech však budete chtít mít třídu, kterou můžete použít, aniž byste ji vytvořili, nebo alespoň třídu, ve které můžete používat členy, aniž byste pro ni vytvořili objekt. Například můžete mít třídu s proměnnou, která zůstane vždy stejná, bez ohledu na to, kde a jak se používá. Toto se nazývá statický člen, statický, protože zůstává stejný.

Třída může být statická a může mít statické členy, jak funkce, tak pole. Statická třída nemůže být instancována, takže jinými slovy bude pracovat spíše jako seskupení příbuzných členů než skutečná třída. Můžete se rozhodnout vytvořit nestatickou třídu, ale nechte ji mít určité statické členy. Nestatická třída může být stále instancována a používána jako běžná třída, ale nemůžete použít statického členu na objekt třídy. Statická třída může obsahovat pouze statické členy.

Nejprve je zde příklad statické třídy:

public static class Rectangle
{
    public static int CalculateArea(int width, int height)
    {
        return width * height;
    }
}

Jak můžete vidět, používáme klíčové slovo "static" k označení třídy jako statické a pak ji znovu použijeme k označení metody CalculateArea také jako statické. Pokud bychom to neudělali, kompilátor by si stěžoval, protože nemůžeme mít nestatického člena statické třídy.

Chcete-li tuto metodu použít, zavoláme ji přímo ve třídě, například takto:

Console.WriteLine("The area is: " + Rectangle.CalculateArea(5, 4));

Mohli bychom přidat další užitečné metody do třídy Obdélník, ale možná vás zajímá, proč předáváme šířku a výšku ke skutečné metodě, namísto jejího ukládání do třídy a pak ji předat tam, kde to potřebujeme? Protože je to statické! Mohli bychom je uložit, ale pouze jednu sadu rozměrů, protože existuje pouze jedna verze statické třídy. To je velmi důležité pochopit.

Namísto toho můžeme třídu vytvořit jako nestatickou, a pak mít CalculateArea jako utilitní funkci v této třídě:

public class Rectangle
{
    private int width, height;

    public Rectangle(int width, int height)
    {
        this.width = width;
        this.height = height;
    }

    public void OutputArea()
    {
        Console.WriteLine("Area output: " + Rectangle.CalculateArea(this.width, this.height));
    }

    public static int CalculateArea(int width, int height)
    {
        return width * height;
    }
}

Jak vidíte, udělali jsme třídu nestatickou. Přidali jsme také konstruktor, který má šířku a výšku a přiřadí jej instanci. Pak jsme přidali metodu OutputArea, která používá statickou metodu pro výpočet plochy. Jedná se o pěkný příklad smíchání statických členů s nestatickými členy v nestatické třídě.

Nejčastěji se používají statické třídy, kde shromažďujete spoustu užitečných metod, které nemusí patřit dohromady, ale nezdá se, že by se ve skutečnosti hodily i jinde.


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!