Qual é a melhor maneira de implementar uma propriedade que é somente leitura para o público, mas gravável para herdeiros?
-
03-07-2019 - |
Pergunta
Se eu tiver uma propriedade que eu quero deixar herdeiros escrever, mas manter somente leitura externamente, o que é a forma preferida para implementar isso? Eu costumo ir com algo como isto:
private object m_myProp;
public object MyProp
{
get { return m_myProp; }
}
protected void SetMyProp(object value)
{
m_myProp = value;
}
Existe uma maneira melhor?
Solução
private object m_myProp;
public object MyProp
{
get { return m_myProp; }
protected set { m_myProp = value; }
}
Ou em C # 3.0
public object MyProp {get; protected set;}
Outras dicas
Este é definitivamente o caminho a percorrer.
public object MyProp {get; protected set;}
Se você estiver em uma versão mais antiga do C #, então este é o caminho a percorrer.
private object _myProp;
public object MyProp
{
get { return _myProp; }
protected set { _myProp = value; }
}
Ter um setter e getter não é realmente melhor do que ter uma variável nesse nível de visibilidade.
Portanto, você poderia apenas fazer a própria variável protegida e o público leitor.
Dito isso, setters e getters são um indicador de mau OO - você tem certeza que precisa deles? Você deve estar se perguntando o objeto para fazer algo com seus membros, não pedindo-lhe para os seus membros, em seguida, manipulá-los fora do objeto.
Esta é uma regra muito geral e há uma série de exceções.