Programování

Vysvětlení statických tříd a členů statické třídy v C #

Statické klíčové slovo v programovacím jazyce C # umožňuje definovat statické třídy a statické členy.

Statická třída je podobná třídě, která je abstraktní i zapečetěná. Rozdíl mezi statickou třídou a nestatickou třídou spočívá v tom, že statickou třídu nelze vytvořit nebo zdědit a že všichni členové třídy mají statickou povahu. Chcete-li deklarovat třídu jako statickou, měli byste ji v deklaraci třídy označit statickým klíčovým slovem.

Ve statické třídě nebo členu není žádné chování, takže nemá smysl ani zdědit statickou třídu. Statická třída může mít pouze statické členy - ve statické třídě nemůžete deklarovat členy instance (metody, proměnné, vlastnosti atd.). Ve statické třídě můžete mít statický konstruktor, ale uvnitř statické třídy nemůžete mít konstruktor instance.

Kdy použít statickou třídu v C #

Kdy byste měli jít na statickou třídu? Obvykle můžete implementovat pomocné třídy nebo třídy obslužných programů jako statické třídy, protože nemusí být vytvořeny instancemi nebo zděděny a obecně obsahují kolekci některých opakovaně použitelných metod a vlastností. Následující výpis kódu ukazuje, jak vypadá statická třída v C #.

veřejná statická třída FileLogger

    {

public static void Log (zpráva řetězce)

        {

// Metoda protokolování dat do textového souboru

        }

    }

Kdy použít statické metody v C #

Statické metody jsou metody, které nevyžadují vyvolání instance třídy - lze je vyvolat v samotné třídě. Všimněte si, že statické metody mají přístup pouze ke členům statické třídy. Můžete mít statické metody uvnitř statické třídy nebo nestatické třídy. Můžete také mít statický konstruktor ve statické třídě nebo nestatické třídě. Statický konstruktor se používá k inicializaci statických členů třídy. Statický konstruktor třídy je vyvolán při prvním přístupu ke statickému členu třídy.

Proč bychom měli používat statické metody? Při provádění jsou o něco rychlejší než nestatické metody, tj. Instance. Důvodem je, že modul runtime prochází tento ukazatel jako implicitní parametr pro nestatické nebo instanční metody. Všimněte si, že pro nestatickou metodu kompilátor vydává callvirt instrukce, i když je metoda nevirtuální. Pokud nastavíte statické metody, kompilátor vydává nevirtuální volání weby, což eliminuje další kontrolu, zda je instance nulová. To vám může poskytnout některé výkonnostní výhody.

Proto pokud je aplikace, kterou vytváříte, výkonově kritická, může být užitečné ve vašem kódu použít statické typy a metody. Zvýšení výkonu může být znatelné, pokud váš kód uskutečňuje velký počet volání na tyto typy a členy.

Následující fragment kódu ukazuje, jak vypadá statická metoda.

public static void Log (zpráva řetězce)

        {

string filePath = @ "F: \ Log.txt";

pomocí (StreamWriter streamWriter = nový StreamWriter (filePath, true))

            {

streamWriter.WriteLine (zpráva);

streamWriter.Close ();

            }

        }

Jak používat statické členy třídy v C #

CLR rozděluje systémovou paměť do tří odlišných oblastí: zásobník, halda a vysokofrekvenční halda. Protože ke statickým objektům lze přistupovat přímo bez vytváření instancí třídy, musí existovat v paměti po celou dobu životnosti aplikace; nemusí být sbírány odpadky. Proto jsou statické objekty uloženy ve vysokofrekvenční hromadě. Obvykle máte jednu vysokofrekvenční haldu pro každou doménu aplikace.

Pojďme se nyní podívat na statické členy třídy. Statický objekt je opět ten, který přetrvává v paměti po celou dobu provádění aplikace. Rozšíření výše uvedeného příkladu protokolování ukazuje následující výpis kódu, jak by vypadala třída FileLogger se statickými členy.

veřejná statická třída FileLogger

    {

soukromý statický objekt jen pro čtení lockObject = nový objekt ();

veřejný statický řetězec FilePath

        {

dostat; soubor;

        }

public static void Log (zpráva řetězce)

        {

zámek (lockObject)

            {

if (! string.IsNullOrEmpty (FilePath))

pomocí (StreamWriter streamWriter = nový StreamWriter (FilePath, true))

                {

streamWriter.WriteLine (zpráva);

streamWriter.Close ();

                }

            }

        }

    }

Všimněte si použití statické vlastnosti s názvem FilePath. Aby byla zajištěna bezpečnost nití, zámek klíčové slovo bylo použito. Byla provedena kontrola uvnitř Protokol () metoda k ověření, že hodnota FilePath vlastnost není null a není prázdná.

Nezapomeňte, že když je rychlost aplikace zásadní, může se vyplatit použít statické metody. Můžete je použít ve statických i nestatických třídách.

$config[zx-auto] not found$config[zx-overlay] not found