Sobes.tech
Junior

Για ποιο σκοπό χρησιμοποιούνται τα πεδία με τον τροποποιητή readonly σε C#;

sobes.tech AI

Απάντηση από AI

Ένα πεδίο με τον τροποποιητή readonly στη C# μπορεί να αρχικοποιηθεί μόνο κατά τη δήλωση του πεδίου ή στον κατασκευαστή της κλάσης. Μετά την αρχικοποίηση, η τιμή του δεν μπορεί να αλλάξει.

Στόχοι χρήσης:

  1. Εξασφάλιση αμεταβλητότητας: Διασφαλίζει ότι η τιμή του πεδίου δεν θα αλλάξει τυχαία μετά τη δημιουργία του αντικειμένου. Αυτό αυξάνει την αξιοπιστία του κώδικα και διευκολύνει την αποσφαλμάτωση.
  2. Σταθερές για κάθε αντίγραφο: Σε αντίθεση με τις στατικές σταθερές (const), τα πεδία readonly μπορούν να έχουν διαφορετικές τιμές για διαφορετικά αντίγραφα της κλάσης.
  3. Αρχικοποίηση στον κατασκευαστή: Επιτρέπει τον καθορισμό μιας τελικής τιμής για το πεδίο βάσει της λογικής του κατασκευαστή, κάτι που δεν είναι δυνατό για τα πεδία const (πρέπει να αρχικοποιούνται με λεκτικό ή σταθερά κατά τη διάρκεια της μεταγλώττισης).
  4. Βελτίωση της απόδοσης κατά την εργασία με δομές: Για δομές, τα πεδία readonly μπορούν να βελτιώσουν την απόδοση, καθώς ο μεταγλωττιστής μπορεί να κάνει ορισ optimizations γνωρίζοντας ότι η τιμή δεν θα αλλάξει.

Παράδειγμα:

public class MyClass
{
    public readonly int ImmutableValue; // Μπορεί να αρχικοποιηθεί εδώ ή στον κατασκευαστή
    public readonly string Name;

    // Κατασκευαστής για την ανάθεση τιμών στα πεδία readonly
    public MyClass(int value, string name)
    {
        ImmutableValue = value;
        Name = name;
    }

    // Αυτή η μέθοδος θα προκαλέσει σφάλμα μεταγλώττισης, καθώς προσπαθεί να αλλάξει ένα πεδίο readonly
    // public void TryChangeValue(int newValue)
    // {
    //     ImmutableValue = newValue; // Σφάλμα μεταγλώττισης
    // }
}