Junior
Για ποιο σκοπό χρησιμοποιούνται τα πεδία με τον τροποποιητή readonly σε C#;
sobes.tech AI
Απάντηση από AI
Ένα πεδίο με τον τροποποιητή readonly στη C# μπορεί να αρχικοποιηθεί μόνο κατά τη δήλωση του πεδίου ή στον κατασκευαστή της κλάσης. Μετά την αρχικοποίηση, η τιμή του δεν μπορεί να αλλάξει.
Στόχοι χρήσης:
- Εξασφάλιση αμεταβλητότητας: Διασφαλίζει ότι η τιμή του πεδίου δεν θα αλλάξει τυχαία μετά τη δημιουργία του αντικειμένου. Αυτό αυξάνει την αξιοπιστία του κώδικα και διευκολύνει την αποσφαλμάτωση.
- Σταθερές για κάθε αντίγραφο: Σε αντίθεση με τις στατικές σταθερές (
const), τα πεδίαreadonlyμπορούν να έχουν διαφορετικές τιμές για διαφορετικά αντίγραφα της κλάσης. - Αρχικοποίηση στον κατασκευαστή: Επιτρέπει τον καθορισμό μιας τελικής τιμής για το πεδίο βάσει της λογικής του κατασκευαστή, κάτι που δεν είναι δυνατό για τα πεδία
const(πρέπει να αρχικοποιούνται με λεκτικό ή σταθερά κατά τη διάρκεια της μεταγλώττισης). - Βελτίωση της απόδοσης κατά την εργασία με δομές: Για δομές, τα πεδία
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; // Σφάλμα μεταγλώττισης
// }
}