Validando o campo no set como if( value <= 0) { return;} e definir como obrigatório no constructor, impede de instanciar um objecto desta classe passando no constructor o valor zero?
Validando o campo no set como if( value <= 0) { return;} e definir como obrigatório no constructor, impede de instanciar um objecto desta classe passando no constructor o valor zero?
Oi, Abel, pra variar a resposta é depende. De quê? Do modo como a implementação da classe foi feita.
Vamos a um código com esse cenário:
public class Produto
{
    public string Nome { get; set; }
    private double _valorUnitario;
    public double ValorUnitario
    {
        get
        {
            return _valorUnitario;
        }
        set
        {
            if (value > 0) _valorUnitario = value;
        }
    }
    public Produto(string nome, double valor)
    {
        Nome = nome;
        _valorUnitario = valor;
    }
}Repare que apesar de validarmos o valor unitário negativo no setter, ainda conseguimos criar um produto com valor negativo:
Produto p = new Produto("Cadeira", -1.99);
Console.WriteLine(p.ValorUnitario); //vai mostrar -1.99Porém se no construtor você usar o setter de valor unitário...
    public Produto(string nome, double valor)
    {
        Nome = nome;
        ValorUnitario = valor;
    }...aí estará seguro de que produto não terá valor negativo!
Faça esse código de teste e me dê um feedback se te ajudou.
Abraços!
Opa, Abel, bom dia. Sua dúvida foi solucionada? Podemos fechar o tópico?
O codigo funcionou. Verifiquei que o objecto foi criado e o ValorUnitario recebeu o valor padrao (zero) do campo _valorUnitario.