A minha dúvida é saber como fica a situação de getters e setters que precisam de outros parametros, tudo vai ser value?
A minha dúvida é saber como fica a situação de getters e setters que precisam de outros parametros, tudo vai ser value?
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.
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 value
de _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!