Hur man använder const, readonly och static i C #

Nyckelorden const, readonly och static används ofta vid programmering i C #. Men medan dessa nyckelord har viktiga skillnader har de också likheter som ibland gör det svårt att veta när man ska använda vilket. Den här artikeln diskuterar const, statiska och readonly nyckelord i C #, hur de jämför och hur vi ska använda dem i våra C # applikationer.

För att arbeta med kodexemplen i den här artikeln bör du ha Visual Studio 2019 installerat i ditt system. Om du inte redan har en kopia kan du ladda ner Visual Studio 2019 här. 

Skapa ett konsolapplikationsprojekt i Visual Studio 2019

Först och främst, låt oss skapa ett .NET Core-konsolapplikationsprojekt i Visual Studio. Förutsatt att Visual Studio 2019 är installerat i ditt system, följ stegen nedan för att skapa ett nytt .NET Core-konsolapplikationsprojekt i Visual Studio.

  1. Starta Visual Studio IDE.
  2. Klicka på "Skapa nytt projekt."
  3. I fönstret "Skapa nytt projekt" väljer du "Konsolapp (.NET Core)" från listan över mallar som visas.
  4. Klicka på Nästa.
  5. I fönstret "Konfigurera ditt nya projekt" som visas nedan anger du namn och plats för det nya projektet.
  6. Klicka på Skapa.

Detta kommer att skapa ett nytt .NET Core-konsolapplikationsprojekt i Visual Studio 2019. Vi använder detta projekt för att illustrera användningen av const, readonly och static keywords i C # i de efterföljande avsnitten i den här artikeln.

Använd det nyckelordet const i C #

Nyckelordet const (läs: konstant) i C # används för att definiera en konstant variabel, dvs en variabel vars värde inte ändras under programmets livstid. Därför är det absolut nödvändigt att du tilldelar ett värde till en konstant variabel vid tidpunkten för deklarationen.

Detta värde för en konstant variabel kallas också ett "kompileringstid" -värde. Variabler som deklareras med hjälp av const-nyckelordet kallas också kompileringstidkonstanter. Det bör noteras att en konstant variabel är oföränderlig, dvs det värde som tilldelats en konstant variabel kan inte ändras senare.

Följande kodavsnitt illustrerar hur du kan definiera en kompileringstidskonstant med hjälp av det nyckelordet const i C #.

const string connectionString = "Ange din databasanslutningssträng här.";

Observera att du måste tilldela ett värde till en konstant variabel när du definierar det. Observera också att du inte kan använda const-nyckelordet för att skapa ett konstant objekt. Det nyckelordet const kan endast tillämpas på de primitiva datatyperna (som ints, floats, chars och booleans) och strängar. Låt oss förstå användningen av const med ett exempel.

Tänk på följande klass som heter Författare. Vi ger författarklassen bara några få egenskaper för att göra det enkelt.

public class Författare

    {

        public int Id {get; uppsättning; }

        public string Förnamn {get; uppsättning; }

        public string LastName {get; uppsättning; }

        public string Adress {get; uppsättning; }

    }

Om du nu försöker skapa ett konstant objekt av författarklassen med hjälp av const-nyckelordet, kommer du att observera kompileringsfelet som visas i figur 1 nedan.

Detta fel indikerar att tilldelningsoperatörens högra sida ska ha ett konstant värde för att tillfredsställa uttrycket. Eftersom påståendet new Author()inte är konstant är tilldelningen inte giltig och därmed felet.

Använd det skrivskyddade nyckelordet i C #

Det readonly nyckelordet kan användas för att definiera en variabel eller ett objekt som endast läsbart. Detta innebär att variabeln eller objektet endast kan tilldelas ett värde i klassomfånget eller i en konstruktör. Du kan inte ändra värdet eller tilldela ett värde till en enbart variabel eller objekt i någon annan metod än konstruktorn.

Låt oss förstå detta med ett exempel. Tänk på följande klass med namnet DbManager.

offentlig klass DbManager

    {

        public readonly string connectionString =

        "Ange din databasanslutningssträng här.";

        offentlig DbManager ()

        {

            connectionString = "Du kan tilldela ett värde här.";

        }

        offentligt ogiltigt ReAssign ()

        {

            connectionString = "Detta är inte tillåtet";

        }

    }

Ovanstående kod kommer inte att kompileras och du kommer att presenteras med felet som visas i figur 2.

Använd det statiska nyckelordet i C #

Det statiska nyckelordet i C # kan användas på en variabel, en metod eller ett objekt. Observera att en statisk medlem av en klass tillhör typen av objektet snarare än förekomsten av typen. Med andra ord nås statiska medlemmar med namnet på klassen, inte namnet på en instans. 

Tänk på följande klass med namnet Utility som innehåller en statisk metod.

public class Utility

    {

        offentlig statisk tomrummet SomeMethod ()

        {

            // Skriv din kod här

        }

    }

Du kan inte ringa metoden SomeMethod()med en instans av klassen Utility. Snarare bör du kalla den här metoden med följande syntax.

Utility.SomeMethod ();

Samma regel gäller för en statisk variabel eller ett statiskt objekt. Du kan bara hänvisa till en statisk medlem i en klass genom att använda syntaxen som visas nedan.

Klassnamn . Medlem;

Eller

Klassnamn . Medlem();

En konstruktör i en klass kan vara statisk. En statisk konstruktör av en klass används för att initialisera de statiska medlemmarna i klassen. En statisk konstruktör i en klass kan dock inte acceptera parametrar.

En regel för const, readonly och static

Här är tumregeln du kan följa när du arbetar med const, readonly och static sökord. Använd const-nyckelordet när värdet i en variabel aldrig kommer att ändras under programmets livstid. Använd det läsbara nyckelordet när du inte är säker på om värdet på en variabel för ett objekt måste ändras men du vill förhindra att andra klasser ändrar värdet. Använd det statiska nyckelordet när du vill att medlemmen i en klass ska tillhöra typen snarare än till förekomsten av typen.

Hur man gör mer i C #:

  • Hur man använder dataanmärkningar i C #
  • Hur man arbetar med GUID i C # 8
  • När ska man använda en abstrakt klass mot gränssnitt i C #
  • Hur man arbetar med AutoMapper i C #
  • Hur man använder lambdauttryck i C #
  • Hur man arbetar med Action, Func och Predicate-delegater i C #
  • Hur man arbetar med delegater i C #
  • Hur man implementerar en enkel logger i C #
  • Hur man arbetar med attribut i C #
  • Hur man arbetar med log4net i C #
  • Hur man implementerar förvarets designmönster i C #
  • Hur man arbetar med reflektion i C #
  • Hur man arbetar med filsystemwatcher i C #
  • Hur man utför lat initialisering i C #
  • Hur man arbetar med MSMQ i C #
  • Hur man arbetar med förlängningsmetoder i C #
  • Hur vi lambdauttryck i C #
  • När ska du använda det flyktiga nyckelordet i C #
  • Så här använder du nyckelordet i C #
  • Hur man implementerar polymorfism i C #
  • Hur man bygger din egen uppgiftsschemaläggare i C #
  • Hur man arbetar med RabbitMQ i C #
  • Hur man arbetar med en tuple i C #
  • Utforska virtuella och abstrakta metoder i C #
  • Hur man använder Dapper ORM i C #
  • Hur man använder flygvikt designmönster i C #