Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Regras para Setters que precisam de mais um parametro, como ficam?

A minha dúvida é saber como fica a situação de getters e setters que precisam de outros parametros, tudo vai ser value?

4 respostas

Olá Anderson, como vai?

O get e set fazem parte de uma propriedade. Quando atribuímos um valor a essa propriedade estamos acessando o get e set.

O seté onde conseguimos definir validações e parâmetros quando informamos o value(valor). Então essa palavra reservada value é somente o valor que o usuário está inserindo, precisamos do value para conseguir acessar os parâmetros e validações.

Espero ter conseguido te ajudar. Caso não seja isso, se puder mandar mais detalhes, talvez exemplos, consigo te auxiliar melhor.

Abraços e bons estudos!

Olá, Ana. Tive a mesma dúvida do Anderson ao experimentar com getters e setters. Suponhamos que numa classe Usuario eu tenha a propriedade _senha. Caso eu queira atribuir um novo valor a essa propriedade, devo passar dois parâmetros para o set: a senha atual (para verificação) e a nova senha. Posso fazer isso utilizando métodos explícitos (aqueles que definimos com get e set no próprio nome), como a seguir:

public void SetPassword(string currentPassword, string newPassword)
        {
            if (currentPassword != _password)
            {
                return;
            }
            _password = newPassword;
        }

Mas quando utilizo o set propriamente dito, a única palavra reservada que pode receber um valor como parâmetro é o value. A pergunta é, como fazer o mesmo que fiz nesse trecho de código utilizando o get e set? Isso é possível?

Essa é a minha duvida, mesmo Samara, queria saber se é possível ter 2 ou mais value no setter.

solução!

Olá Anderson, Samara. Como estão?

Sinto muito pela demora em retornar.

Primeiro irei compartilhar o código que usarei de exemplo. Veja:

public class Cliente
    {
        private string _senha;
        public string Senha
        {
            get
            {
                return _senha;
            }
            set
            {
                if (value == null)
                {
                    Console.WriteLine("Senha inválida!");
                }

                if (value == "".Trim())
                {
                    Console.WriteLine("Senha inválida!");
                }

                _senha = value;
            }
        }

        public string NovaSenha
        {
            get
            {
                return _senha;
            }
            set
            {
                if (String.IsNullOrEmpty(value))
                {
                    Console.WriteLine("Informe uma nova senha válida!");
                }

                _senha = value ;
            }
        }

        public override string ToString()
        {
            return $"Senha: {Senha}";
        }
    }
static void Main(string[] args)
        {
            Cliente cliente = new Cliente();

            cliente.Senha = "123";
            cliente.NovaSenha = "987";

            Console.WriteLine(cliente.NovaSenha);

            Console.ReadLine();

        }

Sobre informar dois ou mais value em um único set: O que conseguimos fazer são validações usando essa mesma palavra reservada de diversas formas. Perceba que fiz dois if no set de Senha.

Sobre utilizar o value atribuindo dois valores diferentes em uma única propriedade, veja o código abaixo:

    private string _senha;
        private string _novaSenha;

        public string Senha
        {
            get
            {
                return _senha;
                return _novaSenha;
            }
            set
            {
                _senha = value;
                _novaSenha = value;
            }
        }

Se fizerem o teste, irão notar que programa não possui erro de compilação o return _novaSenha estará com um aviso de que ele não está sendo utilizado/acessado.

No primeiro código que compartilhei, fiz a criação da propridade NovaSenha onde eu insiro o mesmo valuede _senha onde o return também é _senha. Mas é algo que realmente não devemos fazer rs.

Sobre o código que deixou de exemplo, Samara, perceba que tudo q fez para cria-lo não tem conexão com uma propriedade em si onde utilizamos o value, onde a mesma possui um get/set. O que criou é um método, e sim, é a melhor forma de resolver o problema em questão.

Então respondendo a pergunta do Anderson, sobre ser possível ter dois value no mesmo set: Sim, é possível. É algo útil e segue boas práticas? Não.

Espero ter ajudado. Abraços!