Qual é a melhor prática, convenções de nomenclatura mais comumente aceitas para variáveis privadas em C #?
private int myInteger;
private int MyInteger;
private int mMyInteger;
private int _myInteger;
private int _MyInteger;
- Outra opção misteriosa
Qual você usa e por quê? (Minha empresa é relativamente nova em C # e gostaria de escolher o método mais "aceito pelo setor" para tentar acessar nosso padrão de codificação.)
coding-standards
variables
naming
Vaccano
fonte
fonte
Respostas:
As diretrizes de design da classe MSDN http://msdn.microsoft.com/en-us/library/ta31s3bc.aspx recomendam a opção 1 - myInteger.
Eu sempre usei esse estilo. Tenho uma antipatia pessoal pelo personagem _.
fonte
myInteger
e ele vai combinar_myInteger
. Mas eu não sabia que o MSDS diz para não usar o _myInteger
é uma variável local para um método ou um membro de classe particular?this.myInteger
;)this
todas as vezes, apenas nos métodos em que uma variável local com o mesmo nome está presente. No entanto, você deve escrever um símbolo extra sempre que usar um sublinhado. O que eu concordo é que a aderência ao seu contrato de estilo de código local é sempre importante.Eu uso a opção 4 acima:
Eu gosto de ter alguma indicação de escopo nos nomes de minhas variáveis e o sublinhado é suficiente para esse fim. Também é muito fácil de ler.
fonte
Eu uso o seguinte esquema de nomenclatura:
fonte
Eu acho que a opção 4 é realmente a opção mais legível. Isso ajuda você a ter que fazer isso:
Também torna todos os membros privados mais visíveis. No exemplo a seguir, de onde o diabo está
age
vindo? Sem othis
qualificador, é mais difícil dizer.É muito mais fácil entender:
fonte
Primeiro, PascalCasing é geralmente reservado para propriedades públicas, consts, métodos, etc, da classe. Então eu pularia 2 e 5.
Segundo, a notação húngara é desencorajada no mundo .NET, então (uh, acho) o 3 está certo. Supondo que é isso que está acontecendo com 3.
Isso sai com camelCasing e _camelCasing. Eu normalmente uso _camelCasing para variáveis de classe e camelCasing antigo simples para variáveis com escopo definido para um método ou mais restrito. Camel case é o padrão aceito usado para argumentos de métodos, nomes de variáveis protegidas / privadas e variáveis dentro de um método ou escopo mais restrito.
Também gosto de acrescentar o sublinhado para que minhas variáveis privadas sejam agrupadas no meu intellisense. No entanto, eu faço isso apenas para variáveis com escopo definido para um tipo. Variáveis declaradas em um método ou escopo mais restrito deixo o sublinhado desativado. Facilita mantê-los separados e manter as variáveis menos usadas juntas.
fonte
I don't understand why you would use _camelCasing for class variables
você depois:I'm talking about the difference between Color.ClassMethod() and myColor.InstanceMethod()
Com licença, enquanto estou confuso. Escute, eu raramente uso variáveis de classe, por isso é bom lembrar seus nomes pressionando _ e fazendo com que todas elas apareçam no intellisense agradável e agrupadas.private int integer
Se você ficar confuso entre as variáveis membro e local em um escopo de método, provavelmente precisará refatorar.
fonte
integer
poderia ser melhor reformulado, talvezvalue
?Acredito que a melhor maneira de fazer isso (em C # / .net de qualquer maneira) é uma combinação de 2 e 6:
Teoricamente, não há nenhuma variável aqui, mas ela parece e age como uma variável de instância privada. Se precisarmos adicionar alguma lógica de negócios a esse valor (é um valor completamente interno, para que possamos fazer o que quisermos, afinal de contas), ele já estará 'propriedade' para nós. Uma xícara quente e fumegante de vitória!
fonte
Eu faço a opção 4 porque é assim que o SSCLI se parece, mas sinceramente não me importo muito em nomear variáveis privadas. Público é uma história diferente.
BTW você esqueceu m_MyInteger
fonte
Eu não chamaria isso de "meu" nada!
Mas eu diria
muitas vezes isso é melhor do que ter variáveis explícitas. Se eu tivesse uma variável privada explícita, eu a chamaria
int _variableName;
fonte
Em C ++, costumo usar _ como alterno muito entre editores, o que não me permite ver se é privado.
Para C #, costumo deixar o _ ausente, pois o Visual Studio me permite ver se é privado.
Eu costumo usar a maneira Camel Case para fazer isso.
fonte
Eu uso 4 (
private int _myInteger;
) porque:private int myInteger;
É assim que eu nomeio minhas variáveis locais.
private int MyInteger;
É assim que eu nomeio constantes.
private int mMyInteger;
Este não é o estilo c #.
private int _MyInteger;
Isso parece estranho.
fonte
com o sublinhado.
Bill Wagner explica o porquê em C # eficaz . Mas eu nunca nomearia um número inteiro como meu inteiro , melhor algo como _age ou _length. Incluir o TypeName no nome da instância é uma prática horrível. Os nomes devem ser auto-explicativos e, como o C # é seguro, os tipos podem ser encontrados sempre.
fonte
Você precisa dar um exemplo mais específico, mas:
private int count
,private int badFileCount
,private static readonly int ReconnectAttemptsLimit
A propósito, você obtém tudo isso GRATUITAMENTE ao instalar e começar a usar os melhores e mais recentes
MSFT Stylecop
.fonte
Eu vou pela opção 5:
private int _MyFoo
Não vejo nenhuma vantagem competitiva real sobre o _myFoo.
fonte
Use camelCasing para variáveis privadas como
myInteger
Considere um precedente
_
se a variável for um backup de uma propriedade para reduzir confusões -Variável
_myProperty
para propriedadeMyProperty
fonte
Eu tenho o ReSharper nomeando minhas variáveis, não apenas as minhas, mas todo mundo faz isso também. Existe uma grande quantidade de consistência no projeto.
fonte
O padrão de codificação C # IDesign de Juval Lowy é bastante popular. Este padrão recomenda prefixar variáveis de membro privadas com "m_" (Opção 6). É o que fazemos em nossa equipe.
A opção 4 (
_myInteger
) é uma variação aceitável deste padrão.Não gostei da recomendação do MSDN (
myInteger
), porque dificulta distinguir um membro privado de uma variável local. A recomendação deles, é claro, resolve esse problema qualificando membros privadosthis
, o que me parece redundante.fonte