Qual é a melhor maneira de implementar uma propriedade que é somente leitura para o público, mas gravável para herdeiros?

StackOverflow https://stackoverflow.com/questions/219904

  •  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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top