Μια ιδιότητα στη C# είναι ένα μέλος μιας κλάσης που παρέχει πρόσβαση στα δεδομένα μέσα σε αυτή την κλάση. Όσοι καλούν μπορούν να ορίσουν ή να ανακτήσουν (get) τα δεδομένα. Οι ιδιότητες μπορούν είτε να είναι αυτόματα υλοποιημένες είτε να έχουν ένα πεδίο υποστήριξης. Περιλαμβάνουν έναν προσπελαστή set ή/και έναν προσπελαστή get. Σε κάποιες άλλες γλώσσες, ένας "mutator" είναι περίπου ισοδύναμος με έναν προσπελαστή set και ένας "accessor" είναι περίπου ισοδύναμος με έναν προσπελαστή get, αν και η σύνταξή τους είναι εντελώς διαφορετική.
Όταν ορίζεις μια ιδιότητα, η τιμή εισόδου μπορεί να επικυρωθεί, να μορφοποιηθεί ή να υποστεί άλλους χειρισμούς, και στην πραγματικότητα μπορεί να εκτελεστεί οποιαδήποτε προγραμματιστική λειτουργία είναι διαθέσιμη στον κώδικα της κλάσης.
Παρομοίως, όταν ανακτάς μια ιδιότητα, τα δεδομένα μπορούν να υπολογιστούν ή να μορφοποιηθούν, και πάλι μπορεί να εκτελεστεί οποιαδήποτε προγραμματιστική λειτουργία είναι διαθέσιμη στην κλάση.
Οι ιδιότητες έχουν προσδιοριστές πρόσβασης (public, private κ.λπ.) με τον ίδιο τρόπο όπως και τα άλλα μέλη της κλάσης, αλλά ο προσπελαστής set μπορεί να έχει επίπεδο πρόσβασης ανεξάρτητο από τον προσπελαστή ανάκτησης (get) και αντίστροφα. Μια ιδιότητα δε χρειάζεται να έχει και τους δύο προσπελαστές, μπορεί να έχει μόνο έναν (είτε get είτε set).
Η βασική σύνταξη για να εκφράσεις ιδιότητες μπορεί να πάρει δύο μορφές:
private int myField;
public int MyProperty
{
get { return myField; }
set { myField = value; }
}
public int MyProperty { get; private set; } = 42;
Η αρχικοποίηση είναι προαιρετική.
Σε αυτή την άσκηση θα μοντελοποιήσεις μια ζυγαριά με μονάδα το χιλιόγραμμο.
Έχεις 6 εργασίες, καθεμία από τις οποίες απαιτεί να υλοποιήσεις μία ή περισσότερες ιδιότητες:
Για να καλύψουμε διαφορετικές ανάγκες, κάθε ζυγαριά μπορεί να προσαρμόζεται με μια ακρίβεια (τον αριθμό των ψηφίων μετά το δεκαδικό σύμβολο).
Υλοποίησε την κλάση WeighingMachine ώστε να έχει μια ιδιότητα Precision μόνο για ανάγνωση, ορισμένη στο όρισμα precision του κατασκευαστή:
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
Υλοποίησε την ιδιότητα WeighingMachine.Weight ώστε το βάρος να μπορεί να διαβαστεί και να οριστεί:
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
Προφανώς, κάποιος δεν μπορεί να έχει αρνητικό βάρος.
Πρόσθεσε επικύρωση στην ιδιότητα WeighingMachine.Weight ώστε να πετάει μια εξαίρεση ArgumentOutOfRangeException όταν προσπαθείς να την ορίσεις σε αρνητικό βάρος:
var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException
Η ρύθμιση απόβαρου μπορεί να είναι οποιαδήποτε τιμή (ακόμη και αρνητική ή μια τιμή που κάνει το εμφανιζόμενο βάρος αρνητικό)
Υλοποίησε την ιδιότητα WeighingMachine.TareAdjustment ώστε να μπορεί να οριστεί η ρύθμιση απόβαρου:
var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;
// => wm.TareAdjustment == -10.6
Μετά από διεξοδικές δοκιμές, φαίνεται ότι εξαιτίας ενός κατασκευαστικού προβλήματος όλες οι ζυγαριές έχουν την τάση να υπερεκτιμούν το βάρος κατά 5.
Άλλαξε την ιδιότητα WeighingMachine.TareAdjustment ώστε η προεπιλεγμένη τιμή της να είναι 5.
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
Υλοποίησε την ιδιότητα WeighingMachine.DisplayWeight, η οποία πρέπει να επιστρέφει μια συμβολοσειρά που δείχνει το βάρος μετά τη ρύθμιση απόβαρου, με την εφαρμογή της σωστής ακρίβειας και με τη μονάδα στο τέλος.
Σημείωσε ότι:
display-weight = input-weight - tare-adjustment
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;
// => wm.DisplayWeight == "50.567 kg"
Γράψου στο Exercism για να μάθεις και να κατακτήσεις C# με 62 έννοιες178 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.