Programmēšana

Kā izmantot nemainīgumu C #

Nemainīgums ir funkcionālu programmēšanas valodu iezīme, kas atvieglo programmu rakstīšanu, testēšanu un uzturēšanu. Tomēr nemainīgumu neatbalsta daudzas obligātas programmēšanas valodas. Vēl nesen C # neatbalstīja nemaināmību ārpus izvēles.

Tas mainās, ieviešot ierakstus C # 9, kas ir pieejami priekšskatījumam .NET 5. Tomēr nemainīgumu C # iepriekšējās versijās var ieviest, izmantojot System.Collections.Immutable nosaukumvietu, kas ir pieejama kā NuGet pakotne.

Nemaināms objekts tiek definēts kā objekts, kuru pēc tā izveides nevar mainīt. Daudzos lietošanas gadījumos, piemēram, datu pārsūtīšanas objektiem, vēlama funkcija ir nemainīgums. Šajā rakstā ir apspriests, kāpēc mēs varētu vēlēties izmantot nemainīgumu un kā mēs varam ieviest nemainīgumu C #.

Lai strādātu ar šajā rakstā sniegtajiem kodu piemēriem, sistēmā jābūt instalētai Visual Studio 2019. Ja jums vēl nav kopijas, varat lejupielādēt Visual Studio 2019 šeit.

Visual Studio izveidojiet .NET Core konsoles lietojumprogrammas projektu

Vispirms izveidosim .NET Core konsoles lietojumprogrammas projektu Visual Studio. Pieņemot, ka Visual Studio 2019 ir instalēta jūsu sistēmā, veiciet tālāk norādītās darbības, lai Visual Studio izveidotu jaunu .NET Core konsoles lietojumprogrammas projektu.

  1. Palaidiet Visual Studio IDE.
  2. Noklikšķiniet uz Izveidot jaunu projektu.
  3. Logā “Izveidot jaunu projektu” parādīto veidņu sarakstā atlasiet “Console App (.NET Core)”.
  4. Noklikšķiniet uz Tālāk.
  5. Nākamajā logā “Konfigurēt jauno projektu” norādiet jaunā projekta nosaukumu un vietu.
  6. Noklikšķiniet uz Izveidot.

Tādējādi Visual Studio 2019 tiks izveidots jauns .NET Core konsoles lietojumprogrammas projekts. Mēs izmantosim šo projektu, lai ilustrētu nemainīgumu šī raksta nākamajās sadaļās.

Instalējiet System.Collection.Immutable NuGet pakotni

Lai strādātu ar nemaināmiem veidiem, jums jāinstalē System.Collections.Immutable pakete no NuGet. To var izdarīt, izmantojot NuGet pakotņu pārvaldnieku Visual Studio 2019 IDE, vai arī izpildot šādu komandu NuGet pakotņu pārvaldnieka konsolē:

Install-Package sistēma. Kolekcijas. Maināms

Šajā paketē ietilpst vītnei nekaitīgu klašu kolekcija, kas pazīstama arī kā nemainīgas kolekcijas.

Izprotiet nemainīgumu un ierakstus C # 9

Datu pārsūtīšanas objekts ir klasisks piemērs, kad vēlaties nemaināmību. DTO eksemplārs bieži tiek sērijveida, lai tas varētu būt neatkarīgs no patērētāja vajadzībām izmantotās tehnoloģijas. Protams, pārsūtot datu objektu starp datu bāzi un klientu, jūs vēlaties pārliecināties, ka objektu nevar mainīt - un tas ir tieši DTO mērķis. Jūs varat lasīt vairāk par datu pārsūtīšanas objektu izmantošanu C # no mana iepriekšējā raksta šeit.

Lai izveidotu nemaināmus DTO, varat izmantot ReadOnlyCollection vai nemaināmu vītņu nemaināmu kolekciju veidu priekšrocības System.Collections.Imaināms vārdu telpā Alternatīvi, jūs varētu izmantot ierakstu veidu priekšrocības C # 9, lai ieviestu nemainīgas DTO.

Ieraksta veids C # 9 ir viegls, nemainīgs datu tips (vai viegla klase), kuram ir tikai lasīšanas īpašības. Tā kā ieraksta tips nav maināms, tas ir drošs ar pavedieniem un pēc tā izveides to nevar mutēt vai mainīt.

Ieraksta tipu var inicializēt tikai konstruktora iekšienē. Ieraksta veida izveide klasei (autors šajā piemērā) ir tikpat vienkārša kā šis koda fragments.

klases datu autors (int Id, string firstName, string lastName, string adrese);

Varat arī ierakstīt autora ieraksta veidu, kā parādīts tālāk sniegtajā koda fragmentā:

publiskā datu klase Autors {

public int Id {get; tajā; }

public string firstName {get; tajā; }

public string lastName {get; tajā; }

publiskā virknes adrese {get; tajā; }

}

Deklarējot ieraksta veidu, ņemiet vērā datu atslēgvārda izmantošanu. Datu atslēgvārds, ja to izmanto klases deklarācijā, atzīmē veidu kā ierakstu. Varat izmantot ieraksta veida gadījumu, lai pārsūtītu datus pa slāņiem, vienlaikus nodrošinot DTO nemainīgumu.

Sistēma. Kolekcijas. Neaizstājama vārdu telpa

Nemainīgas kolekcijas ir tās, kuru locekļus nevar mainīt, tiklīdz tās ir izveidotas. System.Collections.Immutable vārdu telpā ietilpst vairākas nemainīgas kolekcijas. Šajā nosaukumvietā ir nemaināmas sarakstu, vārdnīcu, masīvu, hašišu, kaudzīšu un rindu versijas.

ImmutableStack var izmantot, lai stumtu un pop elementus līdzīgi kā mēs darām ar maināmām kaudzēm. Tomēr, tā kā ImmutableStack ir nemainīga kolekcija, tās elementus nevar mainīt. Tātad, veicot izsaukumu uz pop metodi, lai izlaistu elementu no kaudzes, jums tiek izveidots jauns kaudze un sākotnējā kaudze paliek nemainīta.

Ilustrēsim to ar piemēru. Šis koda fragments parāda, kā elementus var virzīt uz nemaināmu kaudzīti.

var kaudze = ImmutableStack.Empty;

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

{

kaudze = kaudze. Nospiediet (i);

}

Šī programma parāda, ka nemaināmās kaudzes elementus nevar mainīt.

klases programma

    {      

static void Main (virkne [] args)

        {

var kaudze = ImmutableStack.Empty;

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

            {

kaudze = kaudze. Nospiediet (i);

            }

Console.WriteLine ("Elementu skaits sākotnējā kaudzītē:

"+ kaudze.Skaits ());

var newStack = kaudze.Pop ();

Console.WriteLine ("Elementu skaits jaunajā kaudzītē:" +

newStack.Count ());

Console.ReadKey ();

        }

    }

Veicot iepriekš minēto programmu, konsoles logā parādīsies šādi rezultāti.

Kā redzat 1. attēlā, sākotnējā nemaināmā kaudze (kurā ir 10 elementi) pēc izsaukuma uz metodi Pop () netiek mainīta. Drīzāk tiek izveidota jauna nemaināma kaudze ar 9 elementiem.

Nemaināmās kolekcijas nepiedāvā konstruktorus, taču jūs varat izmantot statiskās rūpnīcas metodes Izveidot priekšrocības, kā parādīts tālāk sniegtajā koda fragmentā.

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

Ja vēlaties pievienot vai noņemt elementu no šīs kolekcijas, tiks izveidots jauns nemainīgs saraksts, un sākotnējais nemainīgais saraksts paliks nemainīgs.

Nemainīgums ir dizaina izvēle; tas nozīmē, ka tipa instanci pēc izveides nevar mainīt. Izņemot nemaināmos kaudzes un nemainīgās rindas, visu nemainīgo kolekciju pamatā ir AVL koki. Tādējādi jūs varat ievietot elementus jebkurā kolekcijas vietā, t.i., sākumā, vidū vai beigās, bez kopēšanas kokā kopumā.

Kā izdarīt vairāk C #:

  • Kā izmantot datu anotācijas C #
  • Kā strādāt ar GUID C # 8
  • Kad izmantot abstraktu klasi un saskarni C #
  • Kā strādāt ar AutoMapper C #
  • Kā lietot lambda izteicienus C #
  • Kā strādāt ar Action, Func un Predicate delegātiem C #
  • Kā strādāt ar delegātiem C #
  • Kā ieviest vienkāršu reģistrētāju C #
  • Kā strādāt ar atribūtiem C #
  • Kā strādāt ar log4net C #
  • Kā ieviest krātuves dizaina modeli C #
  • Kā strādāt ar refleksiju C #
  • Kā strādāt ar filesystemwatcher C #
  • Kā veikt slinku inicializāciju C #
  • Kā strādāt ar MSMQ C #
  • Kā strādāt ar paplašināšanas metodēm C #
  • Kā mums izteikt lambda izteicienus C #
  • Kad lietot svārstīgo atslēgvārdu C #
  • Kā izmantot ienesīguma atslēgvārdu C #
  • Kā ieviest polimorfismu C #
  • Kā izveidot savu uzdevumu plānotāju C #
  • Kā strādāt ar RabbitMQ C #
  • Kā strādāt ar dubultošanos C #
  • Virtuālu un abstraktu metožu izpēte C #
  • Kā lietot Dapper ORM C #
  • Kā izmantot lidojošā dizaina rakstu C #
$config[zx-auto] not found$config[zx-overlay] not found