Uma propriedade em C# é um membro de uma classe que dá acesso aos dados dessa classe. Quem chama pode definir ou recuperar (obter) os dados. As propriedades podem ser autoimplementadas ou ter um campo de apoio. Elas compreendem um acessador set e/ou um acessador get. Em algumas outras linguagens, um "mutator" equivale mais ou menos a um acessador set, e um "accessor" equivale mais ou menos a um acessador get, embora a composição da sintaxe seja completamente diferente.
Ao definir uma propriedade, o valor de entrada pode ser validado, formatado ou manipulado de outra forma; na verdade, qualquer operação programática acessível ao código da classe pode ser executada.
Da mesma forma, ao recuperar uma propriedade, os dados podem ser calculados ou formatados e, de novo, qualquer operação programática disponível para a classe pode ser executada.
Propriedades têm modificadores de acesso (public, private etc.) da mesma forma que outros membros da classe, mas o acessador set pode ter um nível de acesso independente do acessador de leitura (get), e vice-versa. Uma propriedade não precisa ter os dois acessadores: pode ter apenas um (get ou set).
A sintaxe básica para expressar propriedades pode assumir duas formas:
private int myField;
public int MyProperty
{
get { return myField; }
set { myField = value; }
}
public int MyProperty { get; private set; } = 42;
A inicialização é opcional.
Neste exercício, você vai modelar uma balança usando Quilogramas como unidade.
Você tem 6 tarefas, e cada uma exige que você implemente uma ou mais propriedades:
Para atender a demandas diferentes, permitimos que cada balança seja personalizada com uma precisão (o número de dígitos depois do separador decimal).
Implemente a classe WeighingMachine com uma propriedade Precision somente de leitura, definida a partir do argumento precision do construtor:
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
Implemente a propriedade WeighingMachine.Weight para permitir ler e definir o peso:
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
Claramente, ninguém pode ter um peso negativo.
Adicione validação à propriedade WeighingMachine.Weight para lançar uma ArgumentOutOfRangeException ao tentar defini-la com um peso negativo:
var wm = new WeighingMachine(precision: 3);
wm.Weight = -10; // Throws an ArgumentOutOfRangeException
O ajuste de tara pode ser qualquer valor (até negativo, ou um valor que deixe o peso exibido negativo)
Implemente a propriedade WeighingMachine.TareAdjustment para permitir definir o ajuste de tara:
var wm = new WeighingMachine(precision: 3);
wm.TareAdjustment = -10.6;
// => wm.TareAdjustment == -10.6
Depois de alguns testes minuciosos, parece que, por um problema de fabricação, todas as balanças têm uma tendência a superestimar o peso em 5.
Altere a propriedade WeighingMachine.TareAdjustment para que seu valor padrão seja 5.
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
Implemente a propriedade WeighingMachine.DisplayWeight, que deve retornar uma string mostrando o peso depois do ajuste de tara, com a precisão correta aplicada e a unidade adicionada.
Repare 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"
Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.