Ohjelmointi

Kuinka käyttää muuttumattomuutta C #: ssa

Muuttamattomuus on toiminnallisten ohjelmointikielien ominaisuus, joka helpottaa ohjelmien kirjoittamista, testaamista ja ylläpitoa. Monet pakottavat ohjelmointikielet eivät kuitenkaan tue muuttumattomuutta. Viime aikoihin asti C # ei tue muuttumattomuutta valmiina.

Tämä muuttuu ottamalla käyttöön tietueet C # 9: ssä, joka on esikatseltavissa .NET 5: ssä. Voimme kuitenkin toteuttaa muuttumattomuuden C #: n aiemmissa versioissa käyttämällä System.Collections.Immutable-nimiavaruutta, joka on saatavana NuGet-pakettina.

Muuttamaton objekti määritellään objektiksi, jota ei voi muuttaa sen luomisen jälkeen. Monissa käyttötapauksissa, kuten tiedonsiirtokohteissa, muuttumattomuus on toivottava ominaisuus. Tässä artikkelissa käsitellään, miksi voimme haluta hyödyntää muuttumattomuutta ja miten voimme toteuttaa muuttumattomuuden C #: ssa.

Jotta voit työskennellä tässä artikkelissa annettujen koodiesimerkkien kanssa, järjestelmässäsi on oltava asennettuna Visual Studio 2019. Jos sinulla ei vielä ole kopiota, voit ladata Visual Studio 2019 täältä.

Luo .NET Core -konsolisovellusprojekti Visual Studiossa

Ensinnäkin, luodaan .NET Core -konsolisovellusprojekti Visual Studiossa. Olettaen, että Visual Studio 2019 on asennettu järjestelmään, luo uusi .NET Core -konsolisovellusprojekti Visual Studiossa noudattamalla seuraavia ohjeita.

  1. Käynnistä Visual Studio IDE.
  2. Napsauta Luo uusi projekti.
  3. Valitse Luo uusi projekti -ikkunassa ”Console App (.NET Core)” näytetystä malliluettelosta.
  4. Napsauta Seuraava.
  5. Määritä seuraavan projektin nimi ja sijainti uuden Konfiguroi uusi projekti -ikkunassa.
  6. Napsauta Luo.

Tämä luo uuden .NET Core -konsolisovellusprojektin Visual Studio 2019: ssä. Tämän projektin avulla kuvataan muuttumattomuutta tämän artikkelin seuraavissa osissa.

Asenna System.Collection.Immutable NuGet -paketti

Jos haluat työskennellä muuttumattomien tyyppien kanssa, sinun on asennettava System.Collections.Immutable-paketti NuGetiltä. Voit tehdä tämän joko Visual Studio 2019 IDE: n sisällä olevan NuGet-paketinhallinnan kautta tai suorittamalla seuraavan komennon NuGet-paketinhallintakonsolissa:

Install-Package System.Collections.Imutable

Tämä paketti sisältää kokoelman langattomia luokkia, jotka tunnetaan myös muuttumattomina kokoelmina.

Ymmärrä muuttumattomuus ja tietueet C # 9: ssä

Tiedonsiirtokohde on klassinen esimerkki siitä, milloin haluat muuttaa. DTO: n esiintymä on usein sarjoitettu, jotta se voi olla riippumaton kuluttajan käytössä käytetystä tekniikasta. Luonnollisesti, kun siirrät dataobjektia tietokannan ja asiakkaan välillä, haluat varmistaa, että objektia ei voida muuttaa - ja juuri tämä on DTO: n tarkoitus. Voit lukea lisää C #: n tiedonsiirtoobjektien käytöstä aikaisemmasta artikkelistani täältä.

Voit luoda muuttumattomia DTO: ita hyödyntämällä ReadOnlyCollection- tai langattomia muuttumattomia kokoelmatyyppejä System.Collections.Immutable-nimiavaruudessa. Vaihtoehtoisesti voit hyödyntää C # 9: n tietuetyyppejä muuttumattomien DTO: iden toteuttamiseksi.

Tietueen tyyppi C # 9 on kevyt, muuttumaton tietotyyppi (tai kevyt luokka), jolla on vain luku -ominaisuudet. Koska tietuetyyppi on muuttumaton, se on langattomasti turvallinen eikä sitä voi muuttaa tai muuttaa sen luomisen jälkeen.

Voit alustaa tietuetyypin vain rakentajan sisällä. Tietuetyypin luominen luokalle (tässä esimerkissä kirjailija) on yhtä yksinkertaista kuin seuraava koodinpätkä.

luokan tiedot Tekijä (int Id, merkkijono etunimi, merkkijono sukunimi, merkkijonon osoite);

Voit myös kirjoittaa Author-tietuetyypin alla olevan koodikatkelman mukaisesti:

julkinen tietoluokka Tekijä {

julkinen int Id {get; sen sisällä; }

public string etunimi {get; sen sisällä; }

public string lastName {get; sen sisällä; }

julkinen merkkijono-osoite {get; sen sisällä; }

}

Huomaa tietosanan käyttö ilmoitettaessa tietueen tyyppi. Tietosana, kun sitä käytetään luokan ilmoituksessa, merkitsee tyypin tietueeksi. Voit hyödyntää tietuetyypin esiintymää siirtääksesi tietoja kerrosten yli samalla, kun varmistat DTO: iden muuttumattomuuden.

System.Collections.Immutable nimitila

Muuttamattomat kokoelmat ovat niitä, joiden jäsenet eivät voi vaihtaa, kun ne on luotu. System.Collections.Immutable-nimitila käsittää useita muuttumattomia kokoelmia. Tämä nimitila sisältää muuttumattomia versioita luetteloista, sanakirjoista, taulukoista, hajautuksista, pinoista ja jonoista.

ImmutableStackia voidaan käyttää elementtien työntämiseen ja popin tekemiseen samalla tavalla kuin muunneltavien pinojen kanssa. Koska ImmutableStack on kuitenkin muuttumaton kokoelma, sen osia ei voida muuttaa. Joten kun soitat pop-menetelmään pop-elementin lisäämiseksi pinosta, sinulle luodaan uusi pino ja alkuperäinen pino pysyy muuttumattomana.

Valaistaan ​​tätä esimerkillä. Seuraava koodinpätkä osoittaa, kuinka voit työntää elementtejä muuttumattomaan pinoon.

var pino = ImmutableStack.Empty;

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

{

pino = pino. työnnä (i);

}

Seuraava ohjelma osoittaa, että muuttamattoman pinon elementtejä ei voida muuttaa.

luokan ohjelma

    {      

staattinen void Main (merkkijono [] args)

        {

var pino = ImmutableStack.Empty;

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

            {

pino = pino. työnnä (i);

            }

Console.WriteLine ("Alkuperäisen pinon elementtien määrä:

"+ pino.Määrä ());

var newStack = pino.Pop ();

Console.WriteLine ("Elementtien lukumäärä uudessa pinossa:" +

newStack.Count ());

Console.ReadKey ();

        }

    }

Kun suoritat yllä olevan ohjelman, tulosteen tulisi näkyä konsoli-ikkunassa seuraavasti.

Kuten kuvasta 1 näkyy, alkuperäinen muuttumaton pino (sisältää 10 elementtiä) ei muutu Pop () -menetelmän kutsun jälkeen. Pikemminkin luodaan uusi muuttumaton pino, jossa on 9 elementtiä.

Muuttamattomat kokoelmat eivät tarjoa rakentajia, mutta voit hyödyntää staattista tehdasmenetelmää nimeltä Luo, kuten alla olevassa koodinpätkässä näkyy.

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

Jos haluat lisätä tai poistaa elementin tästä kokoelmasta, luodaan uusi muuttumaton luettelo ja alkuperäinen muuttumaton luettelo pysyy muuttumattomana.

Muuttamattomuus on suunnitteluvaihtoehto; se tarkoittaa, että tyypin esiintymää ei voi muuttaa sen luomisen jälkeen. Lukuun ottamatta muuttumattomia pinoja ja muuttumattomia jonoja, kaikki muuttumattomat kokoelmat perustuvat AVL-puihin. Siksi voit lisätä elementtejä mihin tahansa kokoelman kohtaan, ts. Alkuun, keskelle tai loppuun, ilman että sinun tarvitsee kopioida puuta kokonaisuudessaan.

Kuinka tehdä enemmän C #: ssä:

  • Tietomerkintöjen käyttäminen C #: ssä
  • Kuinka käyttää GUID-tunnuksia C # 8: ssa
  • Milloin abstraktia luokkaa vs. käyttöliittymää käytetään C #: ssä
  • Kuinka työskennellä AutoMapperin kanssa C #: ssä
  • Kuinka käyttää lambda-lausekkeita C #: ssä
  • Kuinka toimia Action-, Func- ja Predicate-edustajien kanssa C #: ssä
  • Kuinka työskennellä C #: n edustajien kanssa
  • Kuinka toteuttaa yksinkertainen kirjaaja C #: ssä
  • Kuinka työskennellä attribuuttien kanssa C #: ssä
  • Kuinka työskennellä log4netin kanssa C #: ssä
  • Kuinka toteuttaa arkiston suunnittelumalli C #: ssä
  • Kuinka työskennellä heijastuksen kanssa C #: ssä
  • Kuinka työskennellä tiedostojärjestelmän katselijan kanssa C #: ssä
  • Kuinka tehdä laiska alustus C #: ssä
  • Kuinka työskennellä MSMQ: n kanssa C #: ssä
  • Kuinka työskennellä laajennusmenetelmien kanssa C #: ssä
  • Kuinka meille lambda-lausekkeet C #: ssä
  • Milloin haihtuvaa avainsanaa käytetään C #: ssä
  • Tuottoavainsanan käyttäminen C #: ssä
  • Kuinka toteuttaa polymorfismi C #: ssa
  • Kuinka rakentaa oma tehtävän ajastin C #
  • Kuinka työskennellä RabbitMQ: n kanssa C #: ssä
  • Kuinka työskennellä C #: n kanssa
  • Virtuaalisten ja abstraktien menetelmien tutkiminen C #: ssä
  • Kuinka käyttää Dapper ORMia C #: ssä
  • Lentopainokuvion käyttäminen C #: ssä