Uma propriedade em C# é um membro de uma classe que dá acesso aos dados dentro dessa classe. Quem chama pode definir ou obter (get) os dados. As propriedades podem ser implementadas automaticamente ou ter um campo de suporte. Incluem um acessador set e/ou um acessador get. Nalgumas outras linguagens, um "mutator" é mais ou menos equivalente a um acessador set e um "accessor" é mais ou menos equivalente 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 e, de facto, qualquer operação programática acessível ao código da classe pode ser executada.
Da mesma forma, ao obter uma propriedade, os dados podem ser calculados ou formatados e, mais uma vez, qualquer operação programática disponível para a classe pode ser executada.
As 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 obtenção (get) e vice-versa. Uma propriedade não tem de ter ambos os 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 vais modelar uma balança com o quilograma como unidade.
Tens 6 tarefas, cada uma das quais exige que implementes uma ou mais propriedades:
Para responder a exigências diferentes, permitimos que cada balança seja personalizada com uma precisão (o número de algarismos depois do separador decimal).
Implementa a classe WeighingMachine com uma propriedade Precision só de leitura, definida com o argumento precision do construtor:
var wm = new WeighingMachine(precision: 3);
// => wm.Precision == 3
Implementa a propriedade WeighingMachine.Weight para permitir obter e definir o peso:
var wm = new WeighingMachine(precision: 3);
wm.Weight = 60.5;
// => wm.Weight == 60.5
Como é óbvio, ninguém pode ter um peso negativo.
Adiciona 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 (mesmo negativo ou um valor que torne o peso apresentado negativo).
Implementa 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 aprofundados, parece que, devido a um problema de fabrico, todas as balanças têm tendência para sobrestimar o peso em 5.
Altera a propriedade WeighingMachine.TareAdjustment para 5 como valor predefinido.
var wm = new WeighingMachine(precision: 3);
// => wm.TareAdjustment == 5.0
Implementa a propriedade WeighingMachine.DisplayWeight, que deve devolver uma string que mostre o peso depois do ajuste de tara, com a precisão correta aplicada e a unidade adicionada.
Tem em atenção 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"
Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.