Programavimas

Paaiškintos statinės klasės ir statinės klasės nariai C #

Statinis raktinis žodis C # programavimo kalba leidžia apibrėžti statines klases ir statinius narius.

Statinė klasė yra panaši į abstrakčią ir užplombuotą klasę. Statinės klasės ir ne statinės klasės skirtumas yra tas, kad statinės klasės negalima sukurti ar paveldėti, o visi klasės nariai yra statinio pobūdžio. Norėdami klasę paskelbti statine, klasės deklaracijoje turėtumėte ją pažymėti statiniu raktiniu žodžiu.

Statinėje klasėje ar naryje nėra jokio elgesio, todėl nėra prasmės leisti paveldėti ir statinę klasę. Statinė klasė gali turėti tik statinius narius - negalima deklaruoti egzempliorių narių (metodų, kintamųjų, ypatybių ir kt.) Statinėje klasėje. Jūs galite turėti statinį konstruktorių statinėje klasėje, bet negalite turėti egzemplioriaus konstruktoriaus statinėje klasėje.

Kada naudoti statinę klasę C #

Kada turėtumėte eiti į statinę klasę? Paprastai pagalbines ar naudingas klases galite įdiegti kaip statines klases, nes jų nereikia nei tiesiogiai, nei paveldėti ir jose paprastai yra keletas pakartotinai naudojamų metodų ir savybių. Šis kodų sąrašas parodo, kaip atrodo statinė klasė C #.

viešoji statinė klasė „FileLogger“

    {

public static void Žurnalas (eilutės pranešimas)

        {

// Duomenų registravimo teksto faile metodas

        }

    }

Kada naudoti statinius metodus C #

Statiniai metodai yra metodai, kuriems iškviesti nereikia klasės egzemplioriaus - juos galima iškviesti pačioje klasėje. Atminkite, kad statiniai metodai gali pasiekti tik statinės klasės narius. Jūs galite turėti statinius metodus statinėje klasėje arba ne statinėje klasėje. Be to, galite turėti statinį konstruktorių statinėje klasėje arba ne statinėje klasėje. Statiniai konstruktoriai naudojami inicijuojant statinius klasės narius. Statinis klasės konstruktorius iškviečiamas pirmą kartą pasiekus statinį klasės narį.

Kodėl turėtume naudoti statinius metodus? Jie yra šiek tiek greitesni nei nestatiniai metodai, ty egzempliorių metodai. Priežastis ta, kad vykdymo laikas praeina tai žymeklis kaip implicitinis parametras ne statiniams ar egzempliorių metodams. Atkreipkite dėmesį, kad nestatiniam metodui kompiliatorius skleidžia callvirt instrukcija, net jei metodas nėra virtualus. Jei metodus padarysite statinius, kompiliatorius skleidžia ne virtualius skambutis svetaines, pašalindamas papildomą patikrinimą, ar egzempliorius nėra niekinis. Tai gali suteikti jums šiek tiek naudos.

Todėl, jei jūsų kuriama programa yra kritinė našumui, gali būti verta savo kode naudoti statinius tipus ir metodus. Našumas gali būti pastebimas, jei jūsų kodas skambina daugeliui tokių tipų ir narių.

Šis kodo fragmentas parodo, kaip atrodo statinis metodas.

public static void Žurnalas (eilutės pranešimas)

        {

eilutės failasPath = @ "F: \ Log.txt";

naudojant (StreamWriter streamWriter = naujas StreamWriter (filePath, true))

            {

streamWriter.WriteLine (pranešimas);

streamWriter.Close ();

            }

        }

Kaip naudotis statiniais klasės nariais C #

CLR padalina sistemos atmintį į tris skirtingus regionus: kaminą, kaupą ir aukšto dažnio kaupą. Kadangi prie statinių objektų galima tiesiogiai pasiekti nekuriant klasės egzempliorių, jie turi išlikti atmintyje per visą programos veikimo laiką; jų nereikia rinkti šiukšlių. Todėl statiniai objektai yra saugomi aukšto dažnio krūvoje. Kiekvienam programos domenui paprastai turite vieną aukšto dažnio kaupą.

Pažvelkime į statiškus klasės narius. Vėlgi, statinis objektas yra tas, kuris atmintyje išlieka visą programos vykdymo laiką. Išplėtus aukščiau pateiktą registravimo pavyzdį, šis kodų sąrašas parodo, kaip atrodytų „FileLogger“ klasė su statiniais nariais.

viešoji statinė klasė „FileLogger“

    {

privatus statinis tik skaitomas objektas lockObject = naujas objektas ();

viešoji statinė eilutė FilePath

        {

gauti; rinkinys;

        }

public static void Žurnalas (eilutės pranešimas)

        {

užraktas (lockObject)

            {

jei (! string.IsNullOrEmpty (FilePath))

naudojant [StreamWriter streamWriter = new StreamWriter (FilePath, true)]

                {

streamWriter.WriteLine (pranešimas);

streamWriter.Close ();

                }

            }

        }

    }

Atkreipkite dėmesį į vardinės statinės savybės naudojimą Bylos kelias. Norėdami užtikrinti siūlų saugumą, užraktas raktinis žodis buvo naudojamas. Tikrinimas buvo atliktas Žurnalas () metodas patikrinti, ar Bylos kelias nuosavybė nėra niekinė ir nėra tuščia.

Atminkite, kad kai svarbiausia yra taikymo sparta, gali būti naudinga naudoti statinius metodus. Galite juos naudoti tiek statinėse, tiek nestatinėse klasėse.