Programiranje

Kako uporabiti nespremenljivost v C #

Nespremenljivost je značilnost funkcionalnih programskih jezikov, ki olajša pisanje, testiranje in vzdrževanje programov. Vendar neizogibnosti ne podpirajo številni nujni programski jeziki. Do nedavnega C # ni podpiral nespremenljivosti.

To se spremeni z uvedbo zapisov v C # 9, ki je na voljo za predogled v .NET 5. Vendar lahko nespremenljivost uporabimo v starejših različicah C # z uporabo imenskega prostora System.Collections.Immutable, ki je na voljo kot paket NuGet.

Nespremenljiv objekt je opredeljen kot objekt, ki ga po ustvarjanju ni mogoče spremeniti. V mnogih primerih uporabe, na primer Predmeti za prenos podatkov, je nespremenljivost zaželena lastnost. Ta članek govori o tem, zakaj bi morda želeli izkoristiti nespremenljivost in kako lahko uporabimo nespremenljivost v jeziku C #.

Če želite delati s primeri kod v tem članku, morate imeti v sistemu nameščen Visual Studio 2019. Če kopije še nimate, lahko Visual Studio 2019 prenesete tukaj.

Ustvarite projektni program konzole .NET Core v Visual Studio

Najprej ustvarimo aplikacijski projekt konzole .NET Core v Visual Studio. Ob predpostavki, da je Visual Studio 2019 nameščen v vašem sistemu, sledite spodnjim korakom, da ustvarite nov aplikacijski projekt konzole .NET Core v Visual Studio.

  1. Zaženite Visual Studio IDE.
  2. Kliknite »Ustvari nov projekt«.
  3. V oknu »Ustvari nov projekt« na seznamu predlog izberite »Console App (.NET Core)«.
  4. Kliknite Naprej.
  5. V naslednjem oknu »Konfiguriranje novega projekta« določite ime in mesto novega projekta.
  6. Kliknite Ustvari.

Tako boste ustvarili nov projektni program za konzolo .NET Core v Visual Studio 2019. Ta projekt bomo uporabili za ponazoritev nespremenljivosti v naslednjih odsekih tega članka.

Namestite paket System.Collection.Immutable NuGet

Če želite delati z nespremenljivimi vrstami, namestite paket System.Collections.Immutable podjetja NuGet. To lahko storite prek upravitelja paketov NuGet znotraj IDE Visual Studio 2019 ali pa tako, da v konzoli upravitelja paketov NuGet izvedete naslednji ukaz:

Install-Package System.Collections.Immutable

Ta paket vsebuje zbirko razredov, varnih za nit, znane tudi kot nespremenljive zbirke.

Razumevanje nespremenljivosti in zapisov v C # 9

Predmet prenosa podatkov je klasičen primer, kdaj želite nespremenljivost. Primer DTO je pogosto serializiran, tako da je lahko neodvisen od tehnologije, ki se uporablja na koncu potrošnika. Seveda bi morali pri prenosu podatkovnega objekta med bazo podatkov in odjemalcem zagotoviti, da predmeta ni mogoče spremeniti - in prav to je namen DTO. Več o uporabi objektov za prenos podatkov v C # si lahko preberete iz prejšnjega članka tukaj.

Če želite ustvariti nespremenljive DTO-je, lahko v imenskem prostoru System.Collections.Immutable izkoristite prednosti ReadOnlyCollection ali nespremenljive vrste zbirk, ki niso varne za nit. Lahko pa izkoristite vrste zapisov v C # 9 za izvajanje nespremenljivih DTO-jev.

Vrsta zapisa v C # 9 je lahek, nespremenljiv podatkovni tip (ali lahek razred), ki ima samo lastnosti samo za branje. Ker je vrsta zapisa nespremenljiva, je varna pred nitmi in po ustvarjanju ne more spreminjati ali spreminjati.

Vrsto zapisa lahko inicializirate samo znotraj konstruktorja. Ustvarjanje vrste zapisa za razred (avtor v tem primeru) je tako preprosto kot naslednji delček kode.

podatki o razredu Avtor (int Id, niz firstName, string lastName, naslov niza);

Lahko bi napisali tudi vrsto zapisa Avtor, kot je prikazano v spodnjem delčku kode:

razred javnih podatkov Avtor {

public int Id {get; v; }

javni niz firstName {get; v; }

javni niz lastName {get; v; }

naslov javnega niza {get; v; }

}

Upoštevajte uporabo ključne besede data pri razglasitvi vrste zapisa. Ključna beseda data, ki se uporablja v deklaraciji razreda, označi vrsto kot zapis. Primer primera vrste zapisa lahko uporabite za prenos podatkov med plastmi, hkrati pa zagotovite nespremenljivost DTO-jev.

Imenski prostor System.Collections.Imubutable

Nespremenljive zbirke so tiste, katerih člani se po ustvarjanju ne morejo več spreminjati. Imenski prostor System.Collections.Immutable vsebuje več nespremenljivih zbirk. Ta imenski prostor vsebuje nespremenljive različice seznamov, slovarjev, nizov, zgoščevalnih elementov, nizov in čakalnih vrst.

ImmutableStack se lahko uporablja za potiskanje in premikanje elementov na enak način kot pri spremenljivih skladih. Ker pa je ImmutableStack nespremenljiva zbirka, njenih elementov ni mogoče spreminjati. Torej, ko pokličete metodo pop za izmet elementa iz sklada, se za vas ustvari nov sklad in prvotni sklad ostane nespremenjen.

Ponazorimo to s primerom. Naslednji delček kode prikazuje, kako lahko elemente potisnete v nespremenljiv sklad.

var stack = ImmutableStack.Empty;

za (int i = 0; i <10; i ++)

{

stack = stack.Push (i);

}

Naslednji program dokazuje, da elementov nespremenljivega sklada ni mogoče spremeniti.

razredni program

    {      

statična praznina Main (string [] args)

        {

var stack = ImmutableStack.Empty;

za (int i = 0; i <10; i ++)

            {

stack = stack.Push (i);

            }

Console.WriteLine ("Število elementov v prvotnem kupu:

"+ stack.Count ());

var newStack = stack.Pop ();

Console.WriteLine ("Število elementov v novem svežnju:" +

newStack.Count ());

Console.ReadKey ();

        }

    }

Ko zaženete zgornji program, se v oknu konzole prikažejo rezultati.

Kot lahko vidite na sliki 1, je prvotni nespremenljivi sklad (ki vsebuje 10 elementov) po klicu metode Pop () nespremenjen. Namesto tega je ustvarjen nov nespremenljiv sklad z 9 elementi.

Neizmenljive zbirke ne ponujajo konstruktorjev, vendar lahko izkoristite statično tovarniško metodo, imenovano Ustvari, kot je prikazano v spodnjem delčku kode.

var list = ImmutableList.Create (1, 2, 3, 4, 5);

Če želite element dodati ali odstraniti iz te zbirke, bo ustvarjen nov nespremenljiv seznam, prvotni nespremenljivi seznam pa bo ostal nespremenjen.

Nespremenljivost je izbira zasnove; to pomeni, da primerka tipa ni mogoče spremeniti, potem ko je bil ustvarjen. Razen nespremenljivih skladov in nespremenljivih čakalnih vrst vse nespremenljive zbirke temeljijo na drevesih AVL. Zato lahko elemente vstavite na kateri koli položaj zbirke, tj. Na začetek, sredino ali konec, ne da bi morali drevo kopirati v celoti.

Kako narediti več v jeziku C #:

  • Kako uporabljati pripise podatkov v jeziku C #
  • Kako delati z GUID-i v C # 8
  • Kdaj uporabiti abstraktni razred v primerjavi z vmesnikom v jeziku C #
  • Kako delati z AutoMapper v C #
  • Kako uporabljati lambda izraze v jeziku C #
  • Kako delati z delegati Action, Func in Predicate v C #
  • Kako delati z delegati v C #
  • Kako implementirati preprost zapisovalnik v jeziku C #
  • Kako delati z atributi v jeziku C #
  • Kako delati z log4net v C #
  • Kako implementirati vzorec oblikovanja repozitorija v C #
  • Kako delati z refleksijo v jeziku C #
  • Kako delati z nadzornikom datotek v C #
  • Kako izvesti leno inicializacijo v C #
  • Kako delati z MSMQ v C #
  • Kako delati z razširitvenimi metodami v jeziku C #
  • Kako do lambda izrazov v jeziku C #
  • Kdaj uporabiti hlapljivo ključno besedo v jeziku C #
  • Kako uporabiti ključno besedo yield v jeziku C #
  • Kako uporabiti polimorfizem v jeziku C #
  • Kako zgraditi lasten načrtovalnik opravil v C #
  • Kako delati z RabbitMQ v C #
  • Kako delati s korpico v jeziku C #
  • Raziskovanje virtualnih in abstraktnih metod v jeziku C #
  • Kako uporabljati Dapper ORM v C #
  • Kako uporabiti vzorec letenja v C #
$config[zx-auto] not found$config[zx-overlay] not found