Προγραμματισμός

Πώς να χρησιμοποιήσετε το αμετάβλητο στο C #

Το αμετάβλητο είναι ένα χαρακτηριστικό των λειτουργικών γλωσσών προγραμματισμού που διευκολύνει την εγγραφή, τη δοκιμή και τη συντήρηση των προγραμμάτων. Ωστόσο, το αμετάβλητο δεν υποστηρίζεται από πολλές επιτακτικές γλώσσες προγραμματισμού. Μέχρι πρόσφατα, το C # δεν υποστήριζε το αμετάβλητο out-of-the-box.

Αυτό αλλάζει με την εισαγωγή εγγραφών στο C # 9, το οποίο είναι διαθέσιμο για προεπισκόπηση στο .NET 5. Ωστόσο, μπορούμε να εφαρμόσουμε το αμετάβλητο σε παλαιότερες εκδόσεις του C # χρησιμοποιώντας το System.Collections.Imutable namespace, το οποίο είναι διαθέσιμο ως πακέτο NuGet.

Ένα αμετάβλητο αντικείμενο ορίζεται ως ένα αντικείμενο που δεν μπορεί να αλλάξει μετά τη δημιουργία του. Για πολλές περιπτώσεις χρήσης, όπως Αντικείμενα Μεταφοράς Δεδομένων, η αμεταβλητότητα είναι ένα επιθυμητό χαρακτηριστικό. Αυτό το άρθρο περιγράφει γιατί μπορεί να θέλουμε να επωφεληθούμε από το αμετάβλητο και πώς μπορούμε να εφαρμόσουμε το αμετάβλητο στο C #

Για να εργαστείτε με τα παραδείγματα κώδικα που παρέχονται σε αυτό το άρθρο, θα πρέπει να έχετε εγκαταστήσει το Visual Studio 2019 στο σύστημά σας. Εάν δεν έχετε ήδη αντίγραφο, μπορείτε να κατεβάσετε το Visual Studio 2019 εδώ.

Δημιουργήστε ένα έργο εφαρμογής .NET Core κονσόλας στο Visual Studio

Πρώτα απ 'όλα, ας δημιουργήσουμε ένα έργο εφαρμογής .NET Core κονσόλας στο Visual Studio. Υποθέτοντας ότι το Visual Studio 2019 είναι εγκατεστημένο στο σύστημά σας, ακολουθήστε τα βήματα που περιγράφονται παρακάτω για να δημιουργήσετε ένα νέο έργο εφαρμογής .NET Core κονσόλας στο Visual Studio.

  1. Εκκινήστε το Visual Studio IDE.
  2. Κάντε κλικ στην επιλογή "Δημιουργία νέου έργου".
  3. Στο παράθυρο "Δημιουργία νέου έργου", επιλέξτε "Εφαρμογή κονσόλας (.NET Core)" από τη λίστα των προτύπων που εμφανίζονται.
  4. Κάντε κλικ στο Επόμενο.
  5. Στο παράθυρο "Διαμόρφωση του νέου έργου" που εμφανίζεται στη συνέχεια, καθορίστε το όνομα και την τοποθεσία για το νέο έργο.
  6. Κάντε κλικ στο Δημιουργία.

Αυτό θα δημιουργήσει ένα νέο έργο εφαρμογής .NET Core κονσόλας στο Visual Studio 2019. Θα χρησιμοποιήσουμε αυτό το έργο για να δείξουμε το αμετάβλητο στις επόμενες ενότητες αυτού του άρθρου.

Εγκαταστήστε το πακέτο System.Collection.Immutable NuGet

Για να εργαστείτε με αμετάβλητους τύπους, πρέπει να εγκαταστήσετε το System.Collections. Αμετάβλητο πακέτο από το NuGet. Μπορείτε να το κάνετε είτε μέσω του διαχειριστή πακέτων NuGet στο Visual Studio 2019 IDE είτε εκτελώντας την ακόλουθη εντολή στην κονσόλα διαχειριστή πακέτων NuGet:

Εγκατάσταση πακέτου συστήματος. Συλλογές. Αμετάβλητο

Αυτό το πακέτο περιλαμβάνει μια συλλογή κατηγοριών ασφαλών για νήματα, επίσης γνωστές ως αμετάβλητες συλλογές.

Κατανοήστε το αμετάβλητο και τις εγγραφές στο C # 9

Ένα αντικείμενο μεταφοράς δεδομένων είναι ένα κλασικό παράδειγμα του πότε θέλετε αμετάβλητη. Ένα παράδειγμα DTO είναι συχνά σειριοποιημένο έτσι ώστε να μπορεί να είναι ανεξάρτητο από την τεχνολογία που χρησιμοποιείται στο τέλος του καταναλωτή. Φυσικά, κατά τη μεταφορά ενός αντικειμένου δεδομένων μεταξύ μιας βάσης δεδομένων και ενός πελάτη, θα θέλατε να διασφαλίσετε ότι το αντικείμενο δεν μπορεί να αλλάξει - και αυτός είναι ακριβώς ο σκοπός ενός DTO. Μπορείτε να διαβάσετε περισσότερα σχετικά με τη χρήση αντικειμένων μεταφοράς δεδομένων στο C # από ​​το προηγούμενο άρθρο μου εδώ.

Για να δημιουργήσετε αμετάβλητα DTO, μπορείτε να επωφεληθείτε από ένα ReadOnlyCollection ή τους τύπους αμετάβλητων συλλογών που είναι ασφαλείς στο νήμα στο System.Collections. Αμετάβλητος χώρος ονομάτων. Εναλλακτικά, θα μπορούσατε να επωφεληθείτε από τους τύπους εγγραφών στο C # 9 για να εφαρμόσετε αμετάβλητα DTO.

Ένας τύπος εγγραφής στο C # 9 είναι ένας ελαφρύς, αμετάβλητος τύπος δεδομένων (ή μια ελαφριά κατηγορία) που έχει ιδιότητες μόνο για ανάγνωση. Δεδομένου ότι ένας τύπος εγγραφής είναι αμετάβλητος, είναι ασφαλής για νήματα και δεν μπορεί να μεταλλαχθεί ή να αλλάξει μετά τη δημιουργία του.

Μπορείτε να προετοιμάσετε έναν τύπο εγγραφής μόνο μέσα σε έναν κατασκευαστή. Η δημιουργία ενός τύπου εγγραφής για μια τάξη (Συγγραφέας σε αυτό το παράδειγμα) είναι τόσο απλή όσο το ακόλουθο απόσπασμα κώδικα.

class class Author (int Id, string firstName, string lastName, string address).

Θα μπορούσατε επίσης να γράψετε τον τύπο εγγραφής Συγγραφέα όπως φαίνεται στο απόσπασμα κώδικα που δίνεται παρακάτω:

δημόσια κατηγορία δεδομένων Συγγραφέας {

δημόσιο int Id {get; μέσα σε αυτό; }

δημόσια συμβολοσειρά firstName {get; μέσα σε αυτό; }

δημόσια συμβολοσειρά lastName {get; μέσα σε αυτό; }

δημόσια διεύθυνση συμβολοσειράς {get; μέσα σε αυτό; }

}

Σημειώστε τη χρήση της λέξης-κλειδιού δεδομένων κατά τη δήλωση του τύπου εγγραφής. Η λέξη-κλειδί δεδομένων όταν χρησιμοποιείται στη δήλωση μιας κλάσης επισημαίνει τον τύπο ως εγγραφή. Μπορείτε να επωφεληθείτε από μια παρουσία τύπου εγγραφής για τη διαβίβαση δεδομένων μεταξύ των επιπέδων, ενώ ταυτόχρονα διασφαλίζετε αμετάβλητο των DTO.

Το System.Collections. Αμετάβλητος χώρος ονομάτων

Αμετάβλητες συλλογές είναι αυτές των οποίων τα μέλη δεν μπορούν να αλλάξουν μετά τη δημιουργία τους. Το System.Collections.Imutable namespace περιλαμβάνει πολλές αμετάβλητες συλλογές. Αυτός ο χώρος ονομάτων περιέχει αμετάβλητες εκδόσεις λιστών, λεξικών, συστοιχιών, παύλων, στοιβών και ουρών.

Το ImmutableStack μπορεί να χρησιμοποιηθεί για να ωθήσει και να αναδυθεί στοιχεία με τον ίδιο τρόπο που κάνουμε με μεταβλητές στοίβες. Ωστόσο, δεδομένου ότι το ImmutableStack είναι μια αμετάβλητη συλλογή, τα στοιχεία του δεν μπορούν να τροποποιηθούν. Έτσι, όταν κάνετε μια κλήση στη μέθοδο pop για να εμφανίσετε ένα στοιχείο από τη στοίβα, δημιουργείται μια νέα στοίβα για εσάς και η αρχική στοίβα παραμένει αμετάβλητη.

Ας το δείξουμε με ένα παράδειγμα. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να ωθήσετε στοιχεία σε μια αμετάβλητη στοίβα.

var stack = ImmutableStack.Empty;

για (int i = 0; i <10; i ++)

{

stack = stack.Push (i);

}

Το ακόλουθο πρόγραμμα δείχνει ότι τα στοιχεία μιας αμετάβλητης στοίβας δεν μπορούν να τροποποιηθούν.

Πρόγραμμα τάξης

    {      

static void Main (συμβολοσειρά [] args)

        {

var stack = ImmutableStack.Empty;

για (int i = 0; i <10; i ++)

            {

stack = stack.Push (i);

            }

Console.WriteLine ("Αριθμός στοιχείων στην αρχική στοίβα:

"+ stack.Count ());

var newStack = stack.Pop ();

Console.WriteLine ("Αριθμός στοιχείων στη νέα στοίβα:" +

newStack.Count ());

Κονσόλα.ReadKey ();

        }

    }

Όταν εκτελείτε το παραπάνω πρόγραμμα, δείτε πώς θα πρέπει να εμφανίζεται η έξοδος στο παράθυρο της κονσόλας.

Όπως μπορείτε να δείτε στο Σχήμα 1, η αρχική αμετάβλητη στοίβα (που περιέχει 10 στοιχεία) παραμένει αμετάβλητη μετά από μια κλήση στη μέθοδο Pop (). Αντίθετα, δημιουργείται μια νέα αμετάβλητη στοίβα με 9 στοιχεία.

Οι αμετάβλητες συλλογές δεν προσφέρουν κατασκευαστές, αλλά μπορείτε να επωφεληθείτε από τη στατική εργοστασιακή μέθοδο που ονομάζεται Δημιουργία όπως φαίνεται στο απόσπασμα κώδικα που δίνεται παρακάτω.

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

Εάν θέλετε να προσθέσετε ή να καταργήσετε ένα στοιχείο από αυτήν τη συλλογή, θα δημιουργηθεί μια νέα αμετάβλητη λίστα και η αρχική αμετάβλητη λίστα θα παραμείνει αμετάβλητη.

Το αμετάβλητο είναι μια επιλογή σχεδιασμού. σημαίνει ότι μια παρουσία ενός τύπου δεν μπορεί να αλλάξει μετά τη δημιουργία της. Εκτός από αμετάβλητες στοίβες και αμετάβλητες ουρές, όλες οι αμετάβλητες συλλογές βασίζονται σε δέντρα AVL. Ως εκ τούτου, μπορείτε να εισαγάγετε στοιχεία σε οποιαδήποτε θέση της συλλογής, δηλαδή στην αρχή, στη μέση ή στο τέλος, χωρίς να χρειάζεται να αντιγράψετε το δέντρο στο σύνολό του.

Πώς να κάνετε περισσότερα στο C #:

  • Πώς να χρησιμοποιήσετε σχολιασμούς δεδομένων στο C #
  • Πώς να εργαστείτε με GUID στο C # 8
  • Πότε να χρησιμοποιήσετε μια αφηρημένη τάξη εναντίον διεπαφής στο C #
  • Πώς να εργαστείτε με το AutoMapper στο C #
  • Πώς να χρησιμοποιήσετε τις εκφράσεις λάμδα στο C #
  • Πώς να συνεργαστείτε με τους αντιπροσώπους Action, Func και Predicate στο C #
  • Πώς να συνεργαστείτε με εκπροσώπους στο C #
  • Πώς να εφαρμόσετε έναν απλό καταγραφέα στο C #
  • Πώς να εργαστείτε με χαρακτηριστικά στο C #
  • Πώς να εργαστείτε με το log4net στο C #
  • Πώς να εφαρμόσετε το μοτίβο σχεδίασης αποθετηρίου στο C #
  • Πώς να εργαστείτε με προβληματισμό στο C #
  • Πώς να εργαστείτε με το σύστημα παρακολούθησης αρχείων στο C #
  • Πώς να εκτελέσετε τεμπέλης αρχικοποίηση στο C #
  • Πώς να εργαστείτε με το MSMQ στο C #
  • Πώς να εργαστείτε με μεθόδους επέκτασης στο C #
  • Πώς να μας εκφράσεις λάμδα στο C #
  • Πότε να χρησιμοποιήσετε την ευμετάβλητη λέξη-κλειδί στο C #
  • Πώς να χρησιμοποιήσετε τη λέξη-κλειδί απόδοσης στο C #
  • Πώς να εφαρμόσετε τον πολυμορφισμό στο C #
  • Πώς να δημιουργήσετε τον δικό σας προγραμματιστή εργασιών στο C #
  • Πώς να εργαστείτε με το RabbitMQ στο C #
  • Πώς να εργαστείτε με μια πλειάδα στο C #
  • Εξερεύνηση εικονικών και αφηρημένων μεθόδων στο C #
  • Πώς να χρησιμοποιήσετε το Dapper ORM στο C #
  • Πώς να χρησιμοποιήσετε το μοτίβο σχεδιασμού flyweight στο C #