4. Statická třída

Další vlastností jazyka C # je možnost deklarovat třídu jako statickou. Statická třída může obsahovat pouze statické složky (všechny objekty, které vytvoříte pomocí této třídy, sdílejí jednu kopii těchto složek). Účelem statické třídy je pouze držet užitkové metody a datové složky. Statická třída nemůže obsahovat žádná data nebo metody instance a nemá smysl pokusit se vytvářet instance statické třídy pomocí operátoru new (pokud to zkusíme, kompilátor ohlásí chybu). Pokud potřebujeme provést jakoukoli inicializaci, statická třída může mít výchozí konstruktor. Ten ale musí být deklarován jako statický. Jakékoli jiné typy konstruktoru kompilátor ohlásí jako nepovolené. [6]

Pokud budeme volat statickou datovou složku, nebo statickou metodu, musíme vždy uvádět jméno statické třídy, které tyto složky náleží (vzpomeňte si, že když jsme deklarovali nějakou metodu a volali jsme ji v hlavní statické metodě Main, musela být tato metoda také statická). Pokud nechceme pokaždé vypisovat název statické třídy, můžeme do jmenného prostoru uvést klíčové slovo using a static a definovat jmenný prostor, ve kterém se statická třída nachází. Pomocí tečkové notace vybereme statickou třídu, na níž se chceme odkazovat.

Pokud je používáno příliš statických tříd definovaných ve jmenném prostoru pomocí using, usnadní nám to psaní kódu, ale na druhou stranu je těžké spravovat takový kód. Není totiž jisté, která metoda do které třídy patří, a to může být problémem při jejich správě.


Ilustrativní příklad StatickaMetodaJinaTrida
Program StatickaMetodaJinaTrida
  • Popis: Deklarace dvou statických tříd, použití jmenného prostoru se statickou třídou
  • Zadání: Deklarujte nestatickou třídu Trida, která bude obsahovat hlavní metodu Main ve které budete volat statickou metodu StatickaMetoda z jiné statické třídy StatickaTrida. StatickaMetoda bude pouze obsahovat výpis textu "Nyní probíhá statická metoda v jiné statické třídě". Obě třídy jsou deklarovány ve společném jmenném prostoru StatickaMetodaJinaTrida
  • Řešení: Bude postupně probráno v následujícím textu

V následujícím kódu vidíme, volání statické metody jiné statické třídy z hlavní statické metody Main určité třídy – viz Kód 1. Pokud bychom neuvedli odkaz na statickou třídu ve jmenném prostoru, museli bychom u prvního příkazu statické metody Main museli před statickou metodu StatickaMetoda uvést název statické třídy, tj. StatickaTrida.Metoda() ve které je metoda umístěna. Tím, že jsme ve jmenném prostoru definovali using static StatickaMetodaJinaTrida.StatickaTrida; nemusíme u volání metodu StatickaMetoda vypisovat třídu, které patří. 

using System;
//Použití jmenného prostoru, kde je deklarována statická třída
using static StatickaMetodaJinaTrida.StatickaTrida;
 
namespace StatickaMetodaJinaTrida
{
    class Trida
    {
        static void Main(string[] args)
        {
            //Volání statické metody jiné statické třídy
            StatickaMetoda();
            //Čekání na stisk klávesy -> ukončení programu
            Console.ReadKey();
        }
    }
 
 
    //Deklarace statické třídy
    static class StatickaTrida
    {
        //Deklarace veřejné statické metody jiné třídy
        public static void StatickaMetoda()
        {
            //Výpis
            Console.WriteLine("Nyní probíhá statická metoda v jiné statické třídě");
        }
    }
}

Kód 1: Příklad volání statické metody statické třídy v jiné nestatické třídě – uvedení použití statické třídy ve jmenném prostoru

Na výpisu v konzole vidíme, že v rámci metody Main proběhlo volání statické metody jiné statické třídy – viz Výstup programu - Kód 1.

Nyní probíhá statická metoda v jiné statické třídě

Výstup programu - Kód 1: Ukázka výsledku volání statické metody statické třídy v jiné nestatické třídě