Ο τροποποιητής const μπορεί (και γενικά θα πρέπει) να εφαρμοστεί σε οποιοδήποτε πεδίο του οποίου η τιμή είναι γνωστή κατά τον χρόνο μεταγλώττισης και δεν αλλάζει κατά τη διάρκεια ζωής του προγράμματος.
private const int num = 1729;
public const string title = "Grand" + " Master";
Ο τροποποιητής readonly μπορεί (και γενικά θα πρέπει) να εφαρμοστεί σε οποιοδήποτε πεδίο που δε μπορεί να γίνει const, όταν η τιμή του δεν αλλάζει κατά τη διάρκεια ζωής του προγράμματος και ορίζεται είτε από έναν ενσωματωμένο αρχικοποιητή είτε κατά τη δημιουργία του στιγμιότυπου (από τον κατασκευαστή ή από μια μέθοδο που καλεί ο κατασκευαστής).
private readonly int num;
private readonly System.Random rand = new System.Random();
public MyClass(int num)
{
this.num = num;
}
Σε περιπτώσεις όπου η ασφάλεια είναι κρίσιμη (ή ακόμη και απλώς σε μια μεγάλη βάση κώδικα, όπου οι προγραμματιστές έχουν διαφορετικές προτεραιότητες και σκοπούς) θα πρέπει να αποφεύγεις να επιτρέπεις να παρακαμφθεί το δημόσιο API μιας κλάσης, δεχόμενος και αποθηκεύοντας παραμέτρους μιας μεθόδου που μπορούν να τροποποιηθούν ή εκθέτοντας ένα μέλος μιας κλάσης που μπορεί να τροποποιηθεί μέσω μιας τιμής επιστροφής ή ως παράμετρο out.
Ενώ ο τροποποιητής readonly εμποδίζει να αντικατασταθεί η τιμή ή η αναφορά σε ένα πεδίο, δεν προσφέρει καμία προστασία για τα μέλη ενός τύπου αναφοράς.
readonly List<int> ints = new List<int>();
void Foo()
{
ints.Add(1); // ok
ints = new List<int>(); // fails to compile
}
Για να διασφαλίσεις ότι όλα τα μέλη ενός τύπου αναφοράς προστατεύονται, τα πεδία μπορούν να γίνουν readonly και μπορούν να οριστούν αυτόματες ιδιότητες χωρίς προσπελαστή set.
Η Βιβλιοθήκη Βασικών Κλάσεων (BCL) παρέχει κάποιες εκδόσεις συλλογών μόνο για ανάγνωση, εκεί όπου απαιτείται να σταματήσει η ενημέρωση των μελών μιας συλλογής. Αυτές προσφέρονται ως περιτυλίγματα:
ReadOnlyDictionary<T> εκθέτει ένα Dictionary<T> ως μόνο για ανάγνωση.ReadOnlyCollection<T> εκθέτει μια List<T> ως μόνο για ανάγνωση.Το σύστημα ελέγχου ταυτότητας που συνάντησες τελευταία φορά στο developer-privileges χρειάζεται λίγη προσοχή. Σου έχει ανατεθεί να καθαρίσεις τον κώδικα. Ένα τέτοιο έργο καθαρισμού όχι μόνο θα κάνει ευκολότερη τη ζωή των μελλοντικών συντηρητών, αλλά θα αποκαλύψει και θα διορθώσει κάποιες ευπάθειες ασφαλείας.
Αυτή είναι μια εργασία refactoring. Πρόσθεσε τον τροποποιητή const σε όποια μέλη των Authenticator ή Identity κρίνεις κατάλληλα.
Αυτή είναι μια εργασία refactoring. Πρόσθεσε τον τροποποιητή readonly σε όποια πεδία της κλάσης Authenticator ή του struct Identity κρίνεις κατάλληλα.
Αφαίρεσε τον προσπελαστή set ή κάνε τον private σε όποια ιδιότητα της κλάσης Authenticator ή του struct Identity κρίνεις κατάλληλη.
Προς το παρόν, το πεδίο ταυτότητας του διαχειριστή επιστρέφεται από μια κλήση στο Admin. Αυτό δεν είναι ιδανικό, καθώς ο καλών μπορεί να τροποποιήσει το πεδίο. Βρες έναν τρόπο να εμποδίσεις τον καλούντα να τροποποιεί τα στοιχεία του διαχειριστή στο αντικείμενο Authenticator.
Προς το παρόν, το λεξικό που περιέχει τις καρφωτές ταυτότητες των προνομιούχων προγραμματιστών επιστρέφεται από μια κλήση στη GetDevelopers(). Αυτό δεν είναι ιδανικό, καθώς ο καλών μπορεί να τροποποιήσει το λεξικό. Βρες έναν τρόπο να εμποδίσεις τον καλούντα να τροποποιεί τα στοιχεία των προγραμματιστών στο αντικείμενο Authenticator.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις C# με 62 έννοιες178 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.