Programmering

Statiske klasser og statiske klassemedlemmer i C # forklart

Det statiske nøkkelordet i programmeringsspråket C # lar deg definere statiske klasser og statiske medlemmer.

En statisk klasse er lik en klasse som både er abstrakt og forseglet. Forskjellen mellom en statisk klasse og en ikke-statisk klasse er at en statisk klasse ikke kan instantiseres eller arves, og at alle medlemmene i klassen er statiske. For å erklære en klasse som statisk, bør du merke den med det statiske nøkkelordet i klassedeklarasjonen.

Det er ingen oppførsel i en statisk klasse eller et medlem, så det er ikke noe poeng i å tillate at en statisk klasse blir arvet heller. En statisk klasse kan bare ha statiske medlemmer - du kan ikke erklære forekomstmedlemmer (metoder, variabler, egenskaper osv.) I en statisk klasse. Du kan ha en statisk konstruktør i en statisk klasse, men du kan ikke ha en forekomstkonstruktør i en statisk klasse.

Når skal du bruke en statisk klasse i C #

Når skal du gå for en statisk klasse? Vanligvis kan du implementere hjelper- eller hjelpeklasser som statiske klasser, siden de ikke trenger å instantieres eller arves og generelt inneholder en samling av noen gjenbrukbare metoder og egenskaper. Følgende kodeliste illustrerer hvordan en statisk klasse i C # ser ut.

offentlig statisk klasse FileLogger

    {

offentlig statisk ugyldig logg (strengmelding)

        {

// Metode for å logge data i en tekstfil

        }

    }

Når skal du bruke statiske metoder i C #

Statiske metoder er metoder som ikke trenger en forekomst av klassen for å bli påkalt - de kan kalles på klassen selv. Merk at statiske metoder bare har tilgang til statiske klassemedlemmer. Du kan ha statiske metoder i en statisk klasse eller en ikke-statisk klasse. Du kan også ha en statisk konstruktør i en statisk klasse eller en ikke-statisk klasse. En statisk konstruktør brukes til å initialisere de statiske medlemmene i en klasse. Den statiske konstruktøren av en klasse påkalles første gang et statisk medlem av klassen blir åpnet.

Hvorfor skal vi bruke statiske metoder? De er litt raskere i kjøring enn ikke-statiske metoder, dvs. for eksempel metoder. Årsaken er at kjøretiden passerer dette pekeren som en implisitt parameter for ikke-statiske metoder eller instansemetoder. Merk at kompilatoren for en ikke-statisk metode sender ut callvirt instruksjon selv om metoden er ikke-virtuell. Hvis du gjør metodene dine statiske, sender kompilatoren ikke-virtuell ut anrop nettsteder, og eliminere den ekstra kontrollen for om forekomsten er null. Dette kan gi deg ytelsesfordeler.

Derfor, hvis applikasjonen du bygger er ytelseskritisk, kan det lønne seg å bruke statiske typer og metoder i koden din. Ytelsesgevinsten kan være merkbar hvis koden din ringer et stort antall samtaler til slike typer og medlemmer.

Følgende kodebit illustrerer hvordan en statisk metode ser ut.

offentlig statisk ugyldig logg (strengmelding)

        {

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

bruker (StreamWriter streamWriter = ny StreamWriter (filePath, true))

            {

streamWriter.WriteLine (melding);

streamWriter.Close ();

            }

        }

Hvordan bruke statiske medlemmer av en klasse i C #

CLR deler systemminnet i tre forskjellige regioner: stakken, bunken og høyfrekvent bunken. Siden statiske objekter kan nås direkte uten å skape forekomster av klassen, må de eksistere i minnet gjennom hele applikasjonens levetid; de trenger ikke å samle søppel. Derfor lagres statiske objekter i høyfrekvent bunken. Du har vanligvis en høyfrekvent heap for hvert applikasjonsdomenet.

La oss nå se på statiske medlemmer av en klasse. Igjen, et statisk objekt er et som vedvarer i minnet hele tiden applikasjonen er i utførelse. Ved å utvide loggeeksemplet ovenfor, illustrerer følgende kodeliste hvordan en FileLogger-klasse med statiske medlemmer vil se ut.

offentlig statisk klasse FileLogger

    {

privat statisk readonly objekt lockObject = nytt objekt ();

offentlig statisk streng FilePath

        {

få; sett;

        }

offentlig statisk ugyldig logg (strengmelding)

        {

lås (lockObject)

            {

if (! string.IsNullOrEmpty (FilePath))

bruker (StreamWriter streamWriter = ny StreamWriter (FilePath, sant))

                {

streamWriter.WriteLine (melding);

streamWriter.Close ();

                }

            }

        }

    }

Legg merke til bruken av den statiske egenskapen som heter FilePath. For å sikre trådsikkerhet, låse nøkkelord har blitt brukt. Det er gjort en sjekk inne i Logg() metode for å verifisere at verdien av FilePath eiendommen er ikke-null og ikke tom.

Husk at når applikasjonshastighet er viktig, kan det lønne seg å bruke statiske metoder. Du kan bruke dem i både statiske klasser og ikke-statiske klasser.

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