C# propriedade ou campo protegidos

Achas que é melhor fazer dos membros da classe protegida uma propriedade protegida auto-implementada para manter o isolamento ou torná-lo um campo protegido é suficiente?

protected bool test { get; set; }

ou

protected bool test;
Author: Vince, 2010-01-27

5 answers

[[1]} geralmente, você deve usar autoproperties - isso permite que você adicione facilmente verificação, ou qualquer outra coisa que você precisa mais tarde. Isto é especialmente importante se o membro protegido será usado por classes fora de sua Assembléia, como a adição de tal código não quebrará seu contrato com eles, ao passo que mudar um campo para um método ou propriedade irá.
 20
Author: thecoop, 2010-01-27 17:59:49

A prática sugerida é fazer dela uma propriedade . A assinatura muda dependendo se é um campo ou uma propriedade, o que pode causar problemas se você estiver cruzando assembléias. Se o tornares uma propriedade para começar, nunca terás este problema. (muitas vezes mais tarde você quer adicionar lógica quando a propriedade é lida ou escrita.)

Em C#, a auto-implementação da propriedade é tão fácil, que não há razão para não o fazer. Além disso, torna as coisas mais claras. Se for realmente destinado a ser usado pelo mundo exterior como parte do funcionamento do objeto, torná-lo uma propriedade. Caso contrário, um futuro programador pode se perguntar se você fez um campo protegido em vez de privado por acidente.
 7
Author: Patrick Karcher, 2010-01-27 18:01:14

Propriedade, apoiada por um campo privado.

Esta pergunta pode ser útil

 3
Author: Sam Holder, 2017-05-23 10:29:11
Nunca deve permitir o acesso directo a uma variável membro de fora da sua classe. Use uma propriedade auto-gerada ou uma propriedade com um campo de suporte. Se você permitir o acesso direto, ele pode levar a algumas dores de cabeça debugging muito ruim quando vários métodos mudam esse valor em uma cadeia de derivação e você não sabe qual está causando o bug.
 3
Author: Jeff Yates, 2010-01-27 18:02:04
Eu sei que esta pergunta é antiga, mas eu responderia com base no alcance do valor, bem como onde ele precisa ser inicializado ou escrito. Tento usar o escopo mais apertado possível. Espero que o seguinte deixe mais claro sobre como decidir:

Valores protegidos: isto assume que o valor só precisa de ser acedido pela classe base e/ou pela classe herdeira, e não por qualquer código externo...

  1. Quando a classe herdeira tem de ler, mas nunca tem que modificar o valor:

    • Se o valor pode ser escrito uma vez que no construtor da classe base, use a seguinte, o que impede a herdar da classe de escrever para ele, e vai um passo além e só permite que ele seja definido no construtor:

      protected readonly bool test;

    • Se o valor puder ser escrito num método diferente do construtor, mas ainda assim apenas na classe de base, use o seguinte, o que impede a classe herdeira de escrever - lhe, mas permite-lhe ler:

      protected bool Test { get; private set; }

  2. Quando a classe herdeira pode modificar o valor, use o seguinte, o que permite tanto a classe herdeira como a classe base escrever a ela em qualquer ponto:

    protected bool test;

Valores privados: isto assume que o valor só precisa de ser acedido a partir da classe em que é declarado.

  1. Se só puder ser ajustado uma vez no construtor, uso:

    readonly bool test;

  2. Se puder ser definido em qualquer ponto da classe, use:

    bool test;

Além disso, não se esqueça que, se o declarar como propriedade, deve usar o PascalCase. Se o declarar como variável Membro, deverá usar o camelCase. Isto tornará mais fácil para outros desenvolvedores entender o escopo.
 2
Author: Jeremy, 2013-08-01 03:02:07