Convenção de capitalização para campos protegidos em C #

17

Quais são as convenções de maiúsculas para nomes de campos protegidos em C #?

É _myVar (como campo privado) ou MyVar (como propriedades)?

Louis Rhys
fonte
3
Tem certeza de que deseja ter campos protegidos? A maioria dos motivos para não ter campos públicos também se aplica aos campos protegidos, por isso acho melhor usar propriedades protegidas.
svick
nos casos de teste, normalmente é conveniente ter campos protegidos .. mas talvez você esteja certo, pode ser alterado para propriedades. Mas se eu quero um campo protegido, qual é a convenção de nomenclatura?
Louis Rhys
2
Tem certeza de que _myVar é a convenção certa para campos particulares? (você está assumindo que sim) Não tentando iniciar uma guerra religiosa aqui, apenas tentando dizer que, se você optar por algum tipo de regra arbitrária para campos particulares, poderá escolher outra regra para seus campos protegidos. O único conselho é ser consistente.
Marek

Respostas:

13

Há algo chamado diretrizes de design para o desenvolvimento de bibliotecas de classes, escrito pela Microsoft.

Diz o seguinte:

Não forneça campos de instância que sejam públicos ou protegidos.

Os campos públicos e protegidos não possuem uma versão correta e não são protegidos pelas demandas de segurança de acesso ao código. Em vez de usar campos publicamente visíveis, use campos particulares e exponha-os por meio de propriedades.

Assim como:

  • Use caixa Pascal em nomes de campo

  • Não use um prefixo para nomes de campos. Por exemplo, não use g_ ou s_ para distinguir campos estáticos e não estáticos.

Quanto ao _prefixo, ele é usado com a mesma frequência da this.convenção (até onde eu vi navegando no código-fonte no CodePlex / GitHub). O ReSharper, por exemplo, promove _em suas verificações de nomes.

jgauffin
fonte
você foi um pouco seletivo ao não incluir o "Não use um prefixo para nomes de campos". do MSDN ao lado da regra de maiúsculas e minúsculas de Pascal :) Embora seja verdade que o re-afiador por padrão promove _ prefixo, se você estiver citando as convenções do MSDN IMHO, não deve misturá-las com suas próprias impressões.
Marek
2
o que significa "não versão bem"? Você está dizendo que, como o campo protegido não é recomendado, não há diretrizes sobre seu nome? Enfim, o Resharper parece recomendarMyVar
Louis Rhys
2
@Marek: eu incluí minha própria preferência. Eu simplesmente afirmei o que o Resharper prefere. E não era minha intenção ser seletivo. Resposta atualizada
jgauffin
1
@jgauffin Além de os consumidores usarem o reflexo no seu código, a alteração de um campo para uma propriedade é transparente para os chamadores? Como a alteração de um campo protegido para uma propriedade protegida com o mesmo nome quebra a compatibilidade?
Quantic
1
ele quebra a compatibilidade binária: msdn.microsoft.com/en-us/library/ta31s3bc(v=vs.71).aspx
jgauffin