Eine Eigenschaft in C# ist ein Member einer Klasse, das den Zugriff auf Daten innerhalb dieser Klasse ermöglicht. Aufrufer können die Daten setzen oder abrufen (get). Eigenschaften können entweder automatisch implementiert sein oder ein Backing-Field haben. Sie bestehen aus einem set-Accessor und/oder einem get-Accessor. In manchen anderen Sprachen entspricht ein „Mutator“ ungefähr einem set-Accessor und ein „Accessor“ ungefähr einem get-Accessor, obwohl der Aufbau der Syntax völlig anders ist.
Beim Setzen einer Eigenschaft kann der Eingabewert validiert, formatiert oder anderweitig bearbeitet werden. Tatsächlich kann jede programmatische Operation ausgeführt werden, auf die der Code in der Klasse zugreifen kann.
Ebenso können beim Abrufen einer Eigenschaft Daten berechnet oder formatiert werden, und auch hier kann jede programmatische Operation ausgeführt werden, die der Klasse zur Verfügung steht.
Eigenschaften haben Zugriffsmodifikatoren (public, private usw.) genauso wie andere Klassenmember. Der set-Accessor kann jedoch eine Zugriffsebene haben, die unabhängig vom get-Accessor ist, und umgekehrt. Eine Eigenschaft muss nicht beide Accessoren haben, sie kann auch nur einen besitzen (entweder get oder set).
Die grundlegende Syntax für Eigenschaften kann zwei Formen annehmen:
private int myField;
public int MyProperty
{
get { return myField; }
set { myField = value; }
}
public int MyProperty { get; private set; } = 42;
Die Initialisierung ist optional.
In dieser Übung modellierst du eine Waage mit Kilogramm als Einheit.
Du hast 6 Aufgaben, für die du jeweils eine oder mehrere Eigenschaften implementieren musst:
Um unterschiedlichen Anforderungen gerecht zu werden, lässt sich jede Waage mit einer Genauigkeit konfigurieren (die Anzahl der Nachkommastellen).
Implementiere die Klasse WeighingMachine mit einer schreibgeschützten Eigenschaft Precision, die auf das Argument precision des Konstruktors gesetzt wird:
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
Implementiere die Eigenschaft WeighingMachine.Weight so, dass das Gewicht abgerufen und gesetzt werden kann:
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
Natürlich kann niemand ein negatives Gewicht haben.
Füge der Eigenschaft WeighingMachine.Weight eine Validierung hinzu, die eine ArgumentOutOfRangeException auslöst, wenn versucht wird, sie auf ein negatives Gewicht zu setzen:
var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException
Die Tara-Anpassung kann jeder Wert sein (sogar negativ oder ein Wert, der das angezeigte Gewicht negativ macht).
Implementiere die Eigenschaft WeighingMachine.TareAdjustment so, dass die Tara-Anpassung gesetzt werden kann:
var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;
// => wm.TareAdjustment == -10.6
Nach einigen gründlichen Tests stellt sich heraus, dass alle Waagen aufgrund eines Herstellungsfehlers dazu neigen, das Gewicht um 5 zu überschätzen.
Ändere die Eigenschaft WeighingMachine.TareAdjustment so, dass ihr Standardwert 5 ist.
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
Implementiere die Eigenschaft WeighingMachine.DisplayWeight, die einen String zurückgeben soll, der das Gewicht nach der Tara-Anpassung zeigt, mit der korrekten Genauigkeit und der angehängten Einheit.
Beachte:
display-weight = input-weight - tare-adjustment
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;
// => wm.DisplayWeight == "50.567 kg"
Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.