Pergunta

Parece que cada C analisador # estática quer reclamar quando vê um campo público. Mas por que? Certamente há casos em que um público (ou interna) campo é o suficiente, e não há nenhum ponto em ter uma propriedade com seus métodos get_ e set_? E se eu tenho certeza que eu não vou ser redefinindo o campo ou adicionando a ele (efeitos secundários são ruins, certo?) -? Não deve um bastam simples campo

Foi útil?

Solução

Porque ele quebra o encapsulamento - é por isso que a maioria das pessoas usar acessores pesadamente. No entanto, se você acha que é a solução certa para a sua tarefa, ignorá-lo (ou seja, as queixas de encapsulamento rigorosas) e fazer o que é certo para o seu projeto. Não deixe que os nazis OO dizer o contrário.

Outras dicas

É realmente sobre o futuro à prova de seu código. Quando você diz (grifo meu):

E se eu sei com certeza que eu não vou ser redefinindo o campo ou adicionando -lo (efeitos secundários são ruins, certo?) - não deve um simples é suficiente campo?

Essa é uma afirmação absoluta, e como sabemos (assim analisadores como a maioria estáticos), existem apenas dois absolutos na vida.

Ele está apenas tentando protegê-lo de que. Se for um problema, você deve ser capaz de dizer o analisador para ignorá-lo (através de atributos que são dependentes da ferramenta de análise que você está usando).

Dado o fato de que a corrente C # 3.0 permite a propriedades automáticas cuja sintaxe é semelhante:

public int Property {get; set;}

o trabalho extra necessário para usando propriedades mais campos públicos é quase zero. A coisa é que você nunca pode estar completamente certo de um campo não será usado de forma diferente ou o acessor nunca vai mudar e dado o trade off no trabalho não há nenhuma razão para não implementar uma propriedade.

De qualquer forma, o analisador reclama de coisas que numa percentagem elevada (neste caso como 99,99% dos casos) são práticas de programação ruins ... mas de qualquer forma é apenas reclamando. Os campos podem ser tornados públicos e existem alguns casos extremos onde a sua utilização directa pode ser justificada. Como sempre, use seu bom senso ... mas tenha em mente a regra elementar para melhores práticas de programação ... Existe uma boa razão para quebrar a convenção? Se há então vá em frente, se não, ou se a resposta for "que envolve mais trabalho", em seguida, ficar com a prática ...

Como alterar campos públicos depois de ter get / set assessores vai quebrar o código. Consulte esta resposta para mais informações

Em geral, é uma boa idéia para ocultar campos por trás propriedades, mesmo que você "sabe com certeza" que você não vai ser redefinindo o campo. Com demasiada frequência, o que você "sabe com certeza" hoje muda amanhã. E, fazendo uma propriedade para se referir a um campo é apenas um pouco de dificuldade.

Dito isso, analisadores estáticos não são nenhum substituto para o pensamento. Se você está feliz com seu projeto e em seu julgamento o analisador é errado, então ignorar ou (se possível) suprimir esse aviso em que circunstância.

Eu acho que o ponto é que geralmente você não sabe com certeza que você não será a redefinição do campo ou adicionando a ele mais tarde. O ponto inteiro de encapsular e esconder os dados é que você está livre para fazer essas coisas sem alterar a interface pública e, posteriormente, quebrando classes dependentes. Se os seus acessores de propriedade são apenas simples GET / conjuntos, em seguida, eles vão ser compilado até que de qualquer maneira, assim que o são há preocupações de desempenho - dada esta sua pergunta deveria ser há qualquer boa razão para não usá-los

?

Um outras propriedades de benefícios trazem para a mesa é ao fazer Reflexão. Quando você refletir sobre sua classe, você pode obter todas as propriedades de uma só vez, em vez de ter para obter as propriedades e os campos.

E não vamos esquecer que os assessores lhe dar flexibilidade ao trabalhar com vários segmentos.

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