Tanto quanto eu sei, private
é o padrão em todos os lugares em C # (o que significa que se eu não escrevo public
, protected
, internal
, etc. será private
por padrão). (Por favor corrija-me se eu estiver errado.)
Então, qual é a razão para escrever essa palavra-chave, ou por que ela existe para os membros?
Por exemplo, quando um manipulador de eventos é gerado automaticamente, tem a seguinte aparência:
private void RatTrap_MouseEnter(object sender, CheeseEventArgs e)
{
}
Mas por que ele escreve privado se isso está implícito e padrão? Só para que os desenvolvedores novatos (que não sabem que é o padrão C #) saibam que é privado? Ou existe alguma diferença para o compilador?
Além disso, há um caso em que a escrita "private" (sozinho) vai mudar a acessibilidade do usuário?
c#
private
specifications
access-modifiers
auto-generate
Camilo Martin
fonte
fonte
internal
, entretanto, por padrão.Respostas:
Isso não é verdade. Os tipos definidos em um namespace (classes, estruturas, interfaces, etc) serão internos por padrão. Além disso, membros de diferentes tipos têm diferentes acessibilidades padrão (como público para membros de interface). Para obter detalhes, consulte Níveis de acessibilidade no MSDN.
Além disso,
Especificar isso explicitamente ajuda a denotar sua intenção de tornar o tipo privado, muito explicitamente. Isso ajuda na manutenção do seu código ao longo do tempo. Isso pode ajudar com outros desenvolvedores (ou você) sabendo se um membro é privado por padrão ou propositalmente, etc.
fonte
private
.get
eset
padrão para a acessibilidade da própria propriedadeNão exatamente - o padrão é "o acesso mais restrito disponível para esta declaração". Portanto, por exemplo, com um tipo de nível superior, o padrão é
internal
; para um tipo aninhado, o padrão éprivate
.Torna-o explícito, o que é bom por dois motivos:
Quanto à sua última parte:
Sim, por tornar metade de uma propriedade mais restritiva que a outra:
Eu costumava usar os padrões em todos os lugares que podia, mas estou convencido (em parte por Eric Lippert) de que deixar claro que você pensou sobre isso e decidiu tornar algo privado é uma boa ideia.
Pessoalmente, eu gostaria que houvesse uma maneira de fazer isso por selado / sem lacre, também, para declarações de tipo - possivelmente nem sequer têm um padrão. Suspeito que muitos desenvolvedores (inclusive eu, se não for cuidadoso) deixam as classes sem lacre apenas porque é menos trabalhoso do que selá-las.
fonte
final
um exemplo mais típico.private
adiciona desordem visual. Para aqueles que insistem que torna as coisas explícitas, eu perguntaria: Você também faz isso com a matemática? Por exemplo:Você acha que isso não está claro sem parênteses redundantes ao redor
b / c
?A regra em C # é muito simples: por padrão, tudo é o mais privado possível. Portanto, se você precisa que algo seja mais visível do que o padrão, adicione um modificador. Caso contrário, não adicione palavras-chave desnecessárias ao seu código.
fonte
Friend
para membros, por exemplo. C # faz seus padrões de visibilidade da maneira certa: as coisas são definidas com a menor visibilidade possível, a menos que sejam alteradas. Pelo que consegui descobrir, parece que o mesmo vale para C ++ (exceto structs). (Não parece ser verdade para F #.)var
, porque ele reduz a desordem visual, e ainda assim tantas pessoas sejam a favor da digitação desnecessáriaprivate
.Declarar explicitamente privado significa que você sabe que é privado. Não apenas pense que é, porque até onde você sabe, é o padrão. Também significa que outra pessoa que olha o código sabe o que é.
Não existe "eu acho que é", "Eu tenho certeza que ele é", etc. Isso só é . E todos estão na mesma página.
eu não sou um desenvolvedor C # . Se eu tivesse que trabalhar com algum código que não foi declarado explicitamente privado , provavelmente assumiria que era interno .
Não gosto quando as coisas estão implicitamente definidas. Nunca é tão claro como quando eles são definidos explicitamente.
fonte
Legibilidade - nem todo mundo sabe que privado é o comportamento padrão.
Intenção - dá uma indicação clara de que você declarou especificamente a propriedade privada (por qualquer motivo).
fonte
Legibilidade e demonstração de intenção são duas grandes razões que posso imaginar.
fonte
Um bom motivo para especificar explicitamente a visibilidade é para que você não precise pensar sobre qual é o padrão para o contexto em que está.
Outra boa razão é porque o FxCop diz para você fazer isso.
fonte
Muitas pessoas (como eu!) Programam regularmente em vários idiomas diferentes. Ser explícito com coisas como essas me impede de precisar me lembrar de todos os detalhes misteriosos de todas as linguagens que eu programo.
fonte
private
" é um detalhe misterioso ... Mas eu entendo o ponto. Outro dia tive dificuldade em lembrar como funcionava a estrutura que usei na semana passada ( MEF ).Eu diria para consistência com a legibilidade do escopo do resto da classe.
fonte