Ohjelmointi

Staattiset luokat ja staattisen luokan jäsenet C #: ssä selitetään

Staattinen avainsana C # -ohjelmointikielellä antaa sinun määrittää staattiset luokat ja staattiset jäsenet.

Staattinen luokka on samanlainen kuin abstrakti ja sinetöity luokka. Staattisen luokan ja ei-staattisen luokan ero on se, että staattista luokkaa ei voida luoda tai periä ja että kaikki luokan jäsenet ovat luonteeltaan staattisia. Jos haluat julistaa luokan staattiseksi, sinun on merkittävä se staattisella avainsanalla luokan ilmoitukseen.

Staattisessa luokassa tai jäsenessä ei ole mitään käyttäytymistä, joten ei ole mitään järkeä sallia staattisen luokan perimistä. Staattisella luokassa voi olla vain staattisia jäseniä - et voi ilmoittaa esiintymän jäseniä (menetelmiä, muuttujia, ominaisuuksia jne.) Staattisessa luokassa. Voit olla staattinen konstruktori staattisessa luokassa, mutta et voi olla instanssirakentaja staattisessa luokassa.

Milloin staattista luokkaa käytetään C #: ssa

Milloin sinun pitäisi mennä staattiselle luokalle? Yleensä voit toteuttaa auttaja- tai apuohjelmaluokat staattisina luokkina, koska niitä ei tarvitse instantisoida tai periä ja ne sisältävät yleensä joukon uudelleenkäytettäviä menetelmiä ja ominaisuuksia. Seuraava koodiluettelo kuvaa, miltä staattinen luokka C #: ssa näyttää.

julkinen staattinen luokka FileLogger

    {

public static void Log (merkkijonoviesti)

        {

// Menetelmä tietojen kirjaamiseksi tekstitiedostoon

        }

    }

Milloin käyttää staattisia menetelmiä C #: ssä

Staattiset menetelmät ovat menetelmiä, jotka eivät tarvitse luokan esiintymää kutsuttavaksi - ne voidaan kutsua itse luokalle. Huomaa, että staattiset menetelmät voivat käyttää vain staattisen luokan jäseniä. Voit käyttää staattisia menetelmiä staattisen luokan tai ei-staattisen luokan sisällä. Lisäksi sinulla voi olla staattinen konstruktori staattisessa luokassa tai ei-staattisessa luokassa. Staattista konstruktoria käytetään alustamaan luokan staattisia jäseniä. Luokan staattinen rakentaja kutsutaan ensimmäisen kerran, kun luokan staattiseen jäseneen päästään.

Miksi meidän tulisi käyttää staattisia menetelmiä? Ne ovat hieman nopeammin suoritettavissa kuin ei-staattiset menetelmät, eli esimerkkimenetelmät. Syynä on, että ajonaika kulkee Tämä osoitin epäsuorana parametrina ei-staattisille tai ilmentymämenetelmille. Huomaa, että ei-staattisessa menetelmässä kääntäjä lähettää callvirt ohjeet, vaikka menetelmä ei olisikaan virtuaalinen. Jos asetat menetelmät staattisiksi, kääntäjä lähettää ei-virtuaalisia puhelu poistamalla ylimääräinen tarkistus siitä, onko ilmentymä nolla. Tämä saattaa antaa sinulle joitain suorituskykyetuja.

Siksi, jos rakentamasi sovellus on suorituskykykriittinen, saattaa olla hyödyllistä käyttää staattisia tyyppejä ja menetelmiä koodissasi. Suorituskyvyn kasvu voi olla tuntuvaa, jos koodisi soittaa paljon tällaisia ​​tyyppejä ja jäseniä.

Seuraava koodinpätkä kuvaa, miltä staattinen menetelmä näyttää.

public static void Log (merkkijonoviesti)

        {

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

käyttäen (StreamWriter streamWriter = uusi StreamWriter (filePath, true))

            {

streamWriter.WriteLine (viesti);

streamWriter.Close ();

            }

        }

Kuinka käyttää luokan staattisia jäseniä C #: ssä

CLR jakaa järjestelmämuistin kolmeen erilliseen alueeseen: pinoon, kasaan ja suurtaajuiseen kasaan. Koska staattisiin kohteisiin pääsee suoraan luomatta luokan esiintymiä, niiden on oltava muistissa koko sovelluksen elinkaaren ajan. niitä ei tarvitse kerätä roskiin. Siksi staattisia esineitä tallennetaan suurtaajuiseen kasaan. Sinulla on tyypillisesti yksi korkeataajuinen kasa kullekin sovellusalueelle.

Katsotaan nyt luokan staattisia jäseniä. Staattinen objekti on jälleen yksi, joka pysyy muistissa koko sovelluksen suorituksen ajan. Laajentamalla yllä olevaa lokikirjaesimerkkiä seuraava koodiluettelo kuvaa, miltä FileLogger-luokka staattisilla jäsenillä näyttää.

julkinen staattinen luokka FileLogger

    {

yksityinen staattinen vain luku -objekti lockObject = uusi objekti ();

julkinen staattinen merkkijono FilePath

        {

saada; aseta;

        }

public static void Log (merkkijonoviesti)

        {

lukko (lockObject)

            {

if (! string.IsNullOrEmpty (FilePath))

käyttäen (StreamWriter streamWriter = uusi StreamWriter (FilePath, true))

                {

streamWriter.WriteLine (viesti);

streamWriter.Close ();

                }

            }

        }

    }

Huomaa nimetyn staattisen ominaisuuden käyttö Tiedostopolku. Langan turvallisuuden varmistamiseksi Lukko avainsanaa on käytetty. Tarkastus on tehty Hirsi() menetelmä varmistaa, että Tiedostopolku ominaisuus ei ole nolla eikä tyhjä.

Muista, että kun sovelluksen nopeus on olennaista, kannattaa käyttää staattisia menetelmiä. Voit käyttää niitä sekä staattisissa luokissa että ei-staattisissa luokissa.

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