Caso o construtor variáveis ??passar direto para campos particulares ou propriedades?

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

  •  02-07-2019
  •  | 
  •  

Pergunta

Agora, este é NET, mas estou certo que o principal deve aplicar-se a toda a linguagem OOP, para simplificar eu tomo .NET como um exemplo:

R # geralmente construtor criador e passando variável de entrada para o campo privado, que para mim Mi tendem a passá-lo para a propriedade.

Qualquer opinião sobre como o diferente e qual é a melhor prática para isso?

Foi útil?

Solução

Usando propriedades é OK, desde que eles não são virtual / substituído. As propriedades são essencialmente métodos, e você não deve chamar métodos virtuais a partir do construtor, porque o tipo apropriado não pode ser ainda construído. Microsoft listou sua própria conjunto de diretrizes , apenas rolar para a baixo para ver a orientação e código relevante snippet que ilustra o problema (eles ilustrá-la utilizando os métodos, mas como mencionado propriedades NET são essencialmente métodos especiais).

Outras dicas

Passando o parâmetro através do setter propriedade permite que você mantenha qualquer código de validação em um único lugar.

Eu recomendaria enviá-lo para a propriedade, em vez de diretamente para o campo privado, embora a sua implementação efectiva ditaria as condições exatas. Por exemplo, às vezes há eventos disparado quando você usa a propriedade, e você não quer disparar esses eventos durante o construtor. Ou talvez você quer contornar a lógica propriedade por algum outro motivo.

Tenha cuidado ao usar o Setter Property. Você pode ter código no setter que pode causar efeitos colaterais inesperados.

Eu manipular campos dentro do construtor. Campos realmente representam o estado inerente de seu objeto, e o trabalho construtor é para inicializar este estado interno. Propriedades estão aqui apenas para fins de encapsulamento, e são uma parte da interface pública para o estado do objeto.

A lógica de transformação que você aplica aos argumentos do construtor ou para os valores propriedades de entrada antes de definir o estado interno do objeto pode ser muito diferente. De qualquer forma, se for o caso, eu costumava usar um método de transformação explícita chamado a partir do setter da propriedade e do construtor, em vez de encadeamento diretamente construtor na setter propriedade.

Se não há lógica em tudo, eu não posso ver por que você gostaria de usar a propriedade setter dentro construtor.

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