Programmering

Statiske klasser og statiske klassemedlemmer i C # forklaret

Det statiske nøgleord i programmeringssprog C # giver dig mulighed for at definere statiske klasser og statiske medlemmer.

En statisk klasse svarer til en klasse, der er både abstrakt og forseglet. Forskellen mellem en statisk klasse og en ikke-statisk klasse er, at en statisk klasse ikke kan instantieres eller arves, og at alle medlemmerne i klassen er statiske. For at erklære en klasse som statisk, skal du markere den med det statiske nøgleord i klassedeklarationen.

Der er ingen adfærd i en statisk klasse eller et medlem, så der er heller ikke nogen mening i at tillade, at en statisk klasse arves. En statisk klasse kan kun have statiske medlemmer - du kan ikke erklære instansmedlemmer (metoder, variabler, egenskaber osv.) I en statisk klasse. Du kan have en statisk konstruktør i en statisk klasse, men du kan ikke have en instanskonstruktør i en statisk klasse.

Hvornår skal man bruge en statisk klasse i C #

Hvornår skal du gå til en statisk klasse? Typisk kan du implementere hjælper- eller hjælpeklasser som statiske klasser, da de ikke behøver at blive instantieret eller arvet og generelt indeholder en samling af nogle genanvendelige metoder og egenskaber. Følgende kodeliste illustrerer, hvordan en statisk klasse i C # ser ud.

offentlig statisk klasse FileLogger

    {

offentlig statisk ugyldig log (strengbesked)

        {

// Metode til at logge data i en tekstfil

        }

    }

Hvornår skal man bruge statiske metoder i C #

Statiske metoder er metoder, der ikke har brug for en forekomst af klassen, der skal påberåbes - de kan kaldes på selve klassen. Bemærk, at statiske metoder kun har adgang til statiske klassemedlemmer. Du kan have statiske metoder inden for en statisk klasse eller en ikke-statisk klasse. Du kan også have en statisk konstruktør i en statisk klasse eller en ikke-statisk klasse. En statisk konstruktør bruges til at initialisere de statiske medlemmer af en klasse. Den statiske konstruktør af en klasse påberåbes første gang et statisk medlem af klassen får adgang.

Hvorfor skal vi bruge statiske metoder? De er lidt hurtigere i udførelse end ikke-statiske metoder, dvs. instansmetoder. Årsagen er, at køretiden passerer det her pointer som en implicit parameter til ikke-statiske metoder eller instansmetoder. Bemærk, at compileren udsender den for en ikke-statisk metode callvirt instruktion, selvom metoden ikke er virtuel. Hvis du gør dine metoder statiske, udsender compileren ikke-virtuel opkald websteder, hvilket fjerner den ekstra kontrol for, om forekomsten er nul. Dette kan give dig nogle ydelsesfordele.

Derfor, hvis det program, du bygger, er ydeevnekritisk, kan det være umagen værd at bruge statiske typer og metoder i din kode. Præstationsgevinsterne kan være mærkbare, hvis din kode foretager et stort antal opkald til sådanne typer og medlemmer.

Følgende kodestykke illustrerer, hvordan en statisk metode ser ud.

offentlig statisk ugyldig log (strengbesked)

        {

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

ved hjælp af (StreamWriter streamWriter = ny StreamWriter (filePath, sand))

            {

streamWriter.WriteLine (besked);

streamWriter.Close ();

            }

        }

Sådan bruges statiske medlemmer af en klasse i C #

CLR opdeler systemhukommelsen i tre forskellige regioner: stakken, bunken og højfrekvent bunken. Da der er adgang til statiske objekter direkte uden at skabe forekomster af klassen, skal de eksistere i hukommelsen gennem hele applikationens levetid; de behøver ikke at blive indsamlet skrald. Derfor lagres statiske objekter i højfrekvent bunke. Du har typisk en højfrekvent bunke for hvert applikationsdomæne.

Lad os nu se på statiske medlemmer af en klasse. Igen er et statisk objekt, der forbliver i hukommelsen, hele tiden applikationen er i udførelse. Ved at udvide loggeeksemplet ovenfor illustrerer følgende kodeliste, hvordan en FileLogger-klasse med statiske medlemmer ville se ud.

offentlig statisk klasse FileLogger

    {

privat statisk readonly objektlåsObject = nyt objekt ();

offentlig statisk streng FilePath

        {

få; sæt;

        }

offentlig statisk ugyldig log (strengbesked)

        {

lås (lockObject)

            {

hvis (! string.IsNullOrEmpty (FilePath))

ved hjælp af (StreamWriter streamWriter = ny StreamWriter (FilePath, sand))

                {

streamWriter.WriteLine (besked);

streamWriter.Close ();

                }

            }

        }

    }

Bemærk brugen af ​​den navngivne statiske egenskab FilePath. For at sikre trådsikkerhed skal låse nøgleord er blevet brugt. Der er foretaget en kontrol inde i Log () metode til at kontrollere, at værdien af FilePath ejendommen er ikke-nul og ikke tom.

Husk, at når applikationshastighed er afgørende, kan det betale sig at bruge statiske metoder. Du kan bruge dem i både statiske klasser og ikke-statiske klasser.