Programavimas

Kaip naudoti nekintamumą C #

Nekintamumas yra funkcinių programavimo kalbų bruožas, palengvinantis programų rašymą, testavimą ir priežiūrą. Tačiau nekintamumo nepalaiko daugelis imperatyvių programavimo kalbų. Dar visai neseniai C # nepalaikė nekintamumo iš karto.

Tai pasikeis įvedus įrašus C # 9, kuriuos galima peržiūrėti .NET 5. Tačiau nekintamumą ankstesnėse C # versijose galime įdiegti naudodami „System.Collections.Immutable“ vardų sritį, kurią galima įsigyti kaip „NuGet“ paketą.

Nekintamas objektas apibrėžiamas kaip objektas, kurio negalima pakeisti sukūrus. Daugeliui naudojimo atvejų, pavyzdžiui, duomenų perdavimo objektams, nekintamumas yra pageidautina savybė. Šiame straipsnyje aptariama, kodėl mes norėtume pasinaudoti nekintamumo pranašumais ir kaip mes galime įgyvendinti nekintamumą C #.

Norėdami dirbti su šiame straipsnyje pateiktais kodų pavyzdžiais, sistemoje turite būti įdiegę „Visual Studio 2019“. Jei dar neturite kopijos, galite atsisiųsti „Visual Studio 2019“ čia.

„Visual Studio“ sukurkite .NET Core konsolės programos projektą

Pirmiausia sukurkime .NET Core konsolės programos projektą „Visual Studio“. Darant prielaidą, kad „Visual Studio 2019“ yra įdiegta jūsų sistemoje, atlikite toliau nurodytus veiksmus, kad sukurtumėte naują .NET Core konsolės programos projektą „Visual Studio“.

  1. Paleiskite „Visual Studio IDE“.
  2. Spustelėkite „Sukurti naują projektą“.
  3. Lange „Kurti naują projektą“ iš rodomų šablonų sąrašo pasirinkite „Console App (.NET Core)“.
  4. Spustelėkite Pirmyn.
  5. Tada rodomame lange „Konfigūruoti naują projektą“ nurodykite naujo projekto pavadinimą ir vietą.
  6. Spustelėkite Sukurti.

Tai sukurs naują „.NET Core“ konsolės programos projektą „Visual Studio 2019“. Šį projektą naudosime tolesnėse šio straipsnio dalyse iliustruodami nekintamumą.

Įdiekite „System.Collection.Immutable“ paketą „NuGet“

Norėdami dirbti su nekintamais tipais, turėtumėte įdiegti „System.Collections.Immutable“ paketą iš „NuGet“. Tai galite padaryti naudodami „NuGet“ paketų tvarkyklę „Visual Studio 2019 IDE“ arba vykdydami šią komandą „NuGet“ paketų tvarkyklės konsolėje:

„Install-Package“ sistema. Kolekcijos. Nekintama

Šį paketą sudaro saugių siūlų klasės, dar vadinamos nekintamomis, kolekcija.

Supraskite nekintamumą ir įrašus C # 9

Duomenų perdavimo objektas yra klasikinis pavyzdys, kai norite nekintamumo. DTO egzempliorius dažnai yra nuoseklus, kad jis būtų nepriklausomas nuo vartotojui naudojamos technologijos. Natūralu, kad perkeldami duomenų objektą iš duomenų bazės į klientą, norėtumėte įsitikinti, kad objekto negalima pakeisti - ir tai yra būtent DTO tikslas. Daugiau apie duomenų perdavimo objektų naudojimą C # galite perskaityti iš mano ankstesnio straipsnio čia.

Norėdami sukurti nekintamus DTO, galite pasinaudoti „ReadOnlyCollection“ arba „System.Collections.Imutable“ vardų srities saugių siūlų nekintamų kolekcijos tipų privalumais. Arba galite pasinaudoti įrašų tipais C # 9, kad įgyvendintumėte nekintamus DTO.

C # 9 įrašo tipas yra lengvas, nekintamas duomenų tipas (arba lengva klasė), turintis tik skaitymo ypatybes. Kadangi įrašo tipas yra nekintamas, jis yra saugus gijoms ir negali būti mutuotas ar pakeistas jį sukūrus.

Įrašo tipą galite inicijuoti tik konstruktoriaus viduje. Kurti klasės įrašą (šiame pavyzdyje autorius) yra taip paprasta, kaip šį kodo fragmentą.

klasės duomenų autorius (int Id, string firstName, string lastName, string address);

Taip pat galite parašyti Autoriaus įrašo tipą, kaip parodyta toliau pateiktame kodo fragmente:

viešoji duomenų klasė Autorius {

public int Id {get; inicijuoti; }

public string firstName {get; inicijuoti; }

public string lastName {get; inicijuoti; }

viešosios eilutės adresas {get; inicijuoti; }

}

Deklaruodami įrašo tipą atkreipkite dėmesį į duomenų raktinio žodžio naudojimą. Duomenų raktinis žodis, kai naudojamas deklaruojant klasę, žymi tipą kaip įrašą. Galite pasinaudoti įrašo tipo egzemplioriumi, kad perduotumėte duomenis per sluoksnius, tuo pačiu užtikrindami DTO nekintamumą.

Sistema. Kolekcijos. Nekintama vardų sritis

Nekintamos kolekcijos yra tos, kurių nariai negali pasikeisti, kai jie yra sukurti. „System.Collections.Immutable“ vardų sritį sudaro kelios nekintamos kolekcijos. Šioje vardų srityje yra nekintamos sąrašų, žodynų, masyvų, maišų, kaminų ir eilių versijos.

„ImmutableStack“ galima naudoti stumiant ir grojant elementus panašiai, kaip mes darome su kintamais kaminais. Tačiau, kadangi „ImmutableStack“ yra nekintama kolekcija, jos elementų keisti negalima. Taigi, kai skambinate „pop“ metodu, kad iškeltumėte elementą iš kamino, jums sukuriamas naujas kaminas, o originalus kaminas lieka nepakitęs.

Paaiškinkime tai pavyzdžiu. Šis kodo fragmentas parodo, kaip galite stumti elementus į nekintamą kaminą.

var stack = ImmutableStack.Empty;

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

{

kaminas = kaminas. Paspauskite (i);

}

Ši programa parodo, kad nekintamo kamino elementų pakeisti negalima.

klasės programa

    {      

static void Main (string [] args)

        {

var stack = ImmutableStack.Empty;

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

            {

kaminas = kaminas. Paspauskite (i);

            }

Console.WriteLine ("Elementų skaičius pradiniame rietuvėje:

"+ kaminas.Skaičius ());

var newStack = kaminas.Pop ();

Console.WriteLine ("Elementų skaičius naujoje rietuvėje:" +

newStack.Count ());

Pultas.ReadKey ();

        }

    }

Kai vykdote pirmiau nurodytą programą, štai kaip išvestis turėtų pasirodyti konsolės lange.

Kaip matote 1 paveiksle, pradinis nekintamas kaminas (kuriame yra 10 elementų) nepakito po iškvietimo „Pop“) metodo. Atvirkščiai, sukuriamas naujas nekintamas kaminas su 9 elementais.

Nekintamos kolekcijos nesiūlo konstruktorių, tačiau galite pasinaudoti statinio gamyklos metodo pavadinimu Kurti, kaip parodyta toliau pateiktame kodo fragmente.

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

Jei norėtumėte pridėti ar pašalinti elementą iš šios kolekcijos, būtų sukurtas naujas nekintamas sąrašas, o originalus nekintamas sąrašas liktų nepakitęs.

Nekintamumas yra dizaino pasirinkimas; tai reiškia, kad sukūrus tipo egzempliorių, jo pakeisti negalima. Išskyrus nekintamas kaminas ir nekintamas eiles, visos nekintamos kolekcijos yra pagrįstos AVL medžiais. Taigi galite įterpti elementus bet kurioje kolekcijos vietoje, t. Y. Pradžioje, viduryje ar pabaigoje, nereikalaujant kopijuoti viso medžio.

Kaip padaryti daugiau C #:

  • Kaip naudoti duomenų komentarus C #
  • Kaip dirbti su GU # C # 8
  • Kada naudoti abstrakčią klasę ir sąsają C #
  • Kaip dirbti su „AutoMapper“ C #
  • Kaip naudoti lambda išraiškas C #
  • Kaip dirbti su „Action“, „Func“ ir „Predicate“ delegatais C #
  • Kaip dirbti su delegatais C #
  • Kaip įdiegti paprastą kaupiklį C #
  • Kaip dirbti su atributais C #
  • Kaip dirbti su „Log4net“ C #
  • Kaip įgyvendinti saugyklos dizaino modelį C #
  • Kaip dirbti su atspindžiu C #
  • Kaip dirbti su failų stebėjimo programa C #
  • Kaip atlikti tingų inicializavimą C #
  • Kaip dirbti su MSMQ C #
  • Kaip dirbti su plėtinių metodais C #
  • Kaip mums lambda išraiškos C #
  • Kada naudoti nepastovų raktinį žodį C #
  • Kaip naudoti pajamingumo raktinį žodį C #
  • Kaip įgyvendinti polimorfizmą C #
  • Kaip sukurti savo užduočių planavimo priemonę C #
  • Kaip dirbti su „RabbitMQ“ C #
  • Kaip dirbti su dvigubu C #
  • Naršyti virtualius ir abstrakčius metodus C #
  • Kaip naudoti Dapper ORM C #
  • Kaip naudoti „flyweight“ dizaino modelį C #