Une propriété en C# est un membre d'une classe qui permet d'accéder aux données de cette classe. Les appelants peuvent définir ou récupérer (get) les données. Les propriétés peuvent être soit auto-implémentées, soit avoir un champ de stockage. Elles comprennent un accesseur set et/ou un accesseur get. Dans d'autres langages, un « mutator » est à peu près équivalent à un accesseur set, et un « accessor » est à peu près équivalent à un accesseur get, bien que la composition de la syntaxe soit complètement différente.
Lors de la définition d'une propriété, la valeur d'entrée peut être validée, formatée ou autrement manipulée, et en fait toute opération programmatique accessible au code de la classe peut être exécutée.
De même, lors de la récupération d'une propriété, les données peuvent être calculées ou formatées, et là encore, toute opération programmatique disponible pour la classe peut être exécutée.
Les propriétés ont des modificateurs d'accès (public, private, etc.) de la même manière que les autres
membres de la classe, mais l'accesseur set peut avoir un niveau d'accès indépendant de l'accesseur de récupération (get)
et inversement. Une propriété ne doit pas nécessairement avoir les deux accesseurs, elle peut n'en avoir qu'un seul (soit get, soit set).
La syntaxe de base pour exprimer les propriétés peut prendre deux formes :
private int myField;
public int MyProperty
{
get { return myField; }
set { myField = value; }
}
public int MyProperty { get; private set; } = 42;
L'initialisation est facultative.
Dans cet exercice, tu vas modéliser une balance avec le kilogramme comme unité.
Tu as 6 tâches, chacune te demandant d'implémenter une ou plusieurs propriétés :
Pour répondre à des besoins différents, chaque balance peut être personnalisée avec une précision (le nombre de chiffres après le séparateur décimal).
Implémente la classe WeighingMachine avec une propriété Precision en lecture seule, initialisée avec l'argument precision du constructeur :
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
Implémente la propriété WeighingMachine.Weight pour permettre de lire et de définir le poids :
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
De toute évidence, une personne ne peut pas avoir un poids négatif.
Ajoute une validation à la propriété WeighingMachine.Weight pour lever une ArgumentOutOfRangeException lorsqu'on essaie de lui affecter un poids négatif :
var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException
Le réglage de tare peut prendre n'importe quelle valeur (même négative, ou une valeur qui rend le poids affiché négatif).
Implémente la propriété WeighingMachine.TareAdjustment pour permettre de définir le réglage de tare :
var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;
// => wm.TareAdjustment == -10.6
Après des tests approfondis, il s'avère qu'en raison d'un problème de fabrication, toutes les balances ont tendance à surestimer le poids de 5.
Modifie la propriété WeighingMachine.TareAdjustment pour que sa valeur par défaut soit 5.
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
Implémente la propriété WeighingMachine.DisplayWeight qui doit renvoyer une string affichant le poids après réglage de tare, avec la précision correcte appliquée et l'unité ajoutée.
Note que :
display-weight = input-weight - tare-adjustment
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.567;
wm.TareAdjustment = 10;
// => wm.DisplayWeight == "50.567 kg"
Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.