Una propiedad en C# es un miembro de una clase que da acceso a los datos dentro de esa clase. Quienes la llaman pueden establecer o recuperar (get) los datos. Las propiedades pueden ser autoimplementadas o tener un campo de respaldo. Se componen de un descriptor de acceso set y/o un descriptor de acceso get. En algunos otros lenguajes, un «mutator» es más o menos equivalente a un descriptor de acceso set y un «accessor» es más o menos equivalente a un descriptor de acceso get, aunque la composición de la sintaxis es completamente diferente.
Al establecer una propiedad, el argumento se puede validar, formatear o manipular de alguna otra manera y, de hecho, se puede ejecutar cualquier operación programática a la que tenga acceso el código de la clase.
De manera similar, al recuperar una propiedad los datos se pueden calcular o formatear y, de nuevo, se puede ejecutar cualquier operación programática disponible para la clase.
Las propiedades tienen modificadores de acceso (public, private, etc.) igual que otros miembros de la clase, pero el descriptor de acceso set puede tener un nivel de acceso independiente del descriptor de acceso get y viceversa. Una propiedad no tiene que tener ambos descriptores de acceso, puede tener solo uno (ya sea get o set).
La sintaxis básica para expresar propiedades puede tomar dos formas:
private int myField;
public int MyProperty
{
get { return myField; }
set { myField = value; }
}
public int MyProperty { get; private set; } = 42;
La inicialización es opcional.
En este ejercicio vas a modelar una báscula con kilogramos como unidad.
Tienes 6 tareas, y cada una requiere que implementes una o más propiedades:
Para adaptarnos a distintas necesidades, permitimos personalizar cada báscula con una precisión (la cantidad de dígitos después del separador decimal).
Implementa la clase WeighingMachine para que tenga una propiedad Precision de solo lectura, establecida con el argumento precision del constructor:
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
Implementa la propiedad WeighingMachine.Weight para permitir obtener y establecer el peso:
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
Claramente, nadie puede tener un peso negativo.
Agrega validación a la propiedad WeighingMachine.Weight para que lance una ArgumentOutOfRangeException cuando se intente asignarle un peso negativo:
var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException
El ajuste de tara puede ser cualquier valor (incluso negativo, o un valor que haga que el peso mostrado sea negativo)
Implementa la propiedad WeighingMachine.TareAdjustment para permitir establecer el ajuste de tara:
var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;
// => wm.TareAdjustment == -10.6
Después de unas pruebas exhaustivas, parece que, debido a un problema de fabricación, todas las básculas tienen una tendencia a sobreestimar el peso en 5.
Cambia la propiedad WeighingMachine.TareAdjustment para que su valor predeterminado sea 5.
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
Implementa la propiedad WeighingMachine.DisplayWeight, que debe devolver un string que muestre el peso después del ajuste de tara, con la precisión correcta aplicada y la unidad agregada.
Ten en cuenta 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"
Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.