Programovanie

Vysvetlenie statických tried a členov statickej triedy v C #

Statické kľúčové slovo v programovacom jazyku C # umožňuje definovať statické triedy a statických členov.

Statická trieda je podobná triede, ktorá je abstraktná aj zapečatená. Rozdiel medzi statickou triedou a nestatickou triedou je v tom, že statickú triedu nie je možné vytvoriť inštanciou alebo zdediť a že všetci členovia triedy majú statickú povahu. Ak chcete triedu vyhlásiť za statickú, mali by ste ju v deklarácii triedy označiť kľúčovým slovom static.

V statickej triede alebo členovi nie je žiadne správanie, takže nemá zmysel umožňovať dedenie statickej triedy. Statická trieda môže mať iba statických členov - v statickej triede nemôžete deklarovať členov inštancií (metódy, premenné, vlastnosti atď.). Môžete mať statický konštruktor v statickej triede, ale nemôžete mať inštančný konštruktor vo vnútri statickej triedy.

Kedy použiť statickú triedu v C #

Kedy by ste mali ísť na statickú hodinu? Triedy pomocných alebo obslužných programov môžete zvyčajne implementovať ako statické triedy, pretože nie je potrebné vytvárať ich inštancie alebo dediť a zvyčajne obsahujú kolekciu niektorých opakovane použiteľných metód a vlastností. Nasledujúci zoznam kódov ilustruje, ako vyzerá statická trieda v C #.

verejná statická trieda FileLogger

    {

public static void Log (reťazcová správa)

        {

// Metóda zapisovania údajov do textového súboru

        }

    }

Kedy použiť statické metódy v C #

Statické metódy sú metódy, ktoré nevyžadujú vyvolanie inštancie triedy - je možné ich vyvolať v triede samotnej. Upozorňujeme, že statické metódy majú prístup iba k členom statickej triedy. Môžete mať statické metódy vo vnútri statickej triedy alebo nestatickej triedy. Môžete tiež mať statický konštruktor v statickej triede alebo v nestatickej triede. Statický konštruktor sa používa na inicializáciu statických členov triedy. Statický konštruktor triedy sa vyvolá pri prvom prístupe k statickému členovi triedy.

Prečo by sme mali používať statické metódy? Ich vykonávanie je o niečo rýchlejšie ako nestatické metódy, t. J. Inštančné metódy. Dôvod je ten, že runtime prechádza cez toto ukazovateľ ako implicitný parameter na nestatické alebo inštančné metódy. Upozorňujeme, že pre nestatickú metódu kompilátor vydáva znak callvirt inštrukcia, aj keď metóda nie je virtuálna. Ak svoje metódy nastavíte na statické, kompilátor vydáva nevirtuálne hovor stránky, čím sa eliminuje ďalšia kontrola, či je inštancia nulová. To vám môže poskytnúť niekoľko výhod z hľadiska výkonu.

Preto ak je vami vytváraná aplikácia výkonovo kritická, môže byť užitočné v kóde použiť statické typy a metódy. Zvýšenie výkonu môže byť značné, ak váš kód umožňuje veľký počet hovorov na tieto typy a členov.

Nasledujúci úryvok kódu ilustruje, ako vyzerá statická metóda.

public static void Log (reťazcová správa)

        {

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

pomocou (StreamWriter streamWriter = nový StreamWriter (filePath, true))

            {

streamWriter.WriteLine (správa);

streamWriter.Close ();

            }

        }

Ako používať statických členov triedy v C #

CLR rozdeľuje systémovú pamäť na tri odlišné oblasti: zásobník, halda a vysokofrekvenčná halda. Pretože k statickým objektom je možné pristupovať priamo bez vytvárania inštancií triedy, musia existovať v pamäti po celú dobu životnosti aplikácie; nemusia sa zbierať odpadky. Preto sú statické objekty uložené vo vysokofrekvenčnej halde. Spravidla máte jednu vysokofrekvenčnú haldu pre každú doménu aplikácie.

Poďme sa teraz pozrieť na statických členov triedy. Statický objekt je opäť taký, ktorý pretrváva v pamäti po celú dobu vykonávania aplikácie. Nasledujúci príklad kódu, ktorý rozširuje vyššie uvedený príklad protokolovania, ilustruje, ako by vyzerala trieda FileLogger so statickými členmi.

verejná statická trieda FileLogger

    {

súkromný statický objekt iba na čítanie lockObject = nový objekt ();

verejný statický reťazec FilePath

        {

dostať; sada;

        }

public static void Log (reťazcová správa)

        {

lock (lockObject)

            {

if (! string.IsNullOrEmpty (FilePath))

pomocou (StreamWriter streamWriter = nový StreamWriter (FilePath, true))

                {

streamWriter.WriteLine (správa);

streamWriter.Close ();

                }

            }

        }

    }

Všimnite si použitie statickej vlastnosti s názvom Cesta k súboru. Na zaistenie bezpečnosti nití slúži zámok kľúčové slovo bolo použité. Vo vnútri servera bola vykonaná kontrola Denník () metóda na overenie, či hodnota Cesta k súboru vlastnosť nie je null a nie je prázdna.

Pamätajte, že keď je rýchlosť aplikácie rozhodujúca, mohlo by sa oplatiť použiť statické metódy. Môžete ich použiť v statických aj nestatických triedach.

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