Existe uma diretriz oficial em C # para a ordem dos itens em termos de estrutura de classe?
Vai:
- Campos públicos
- Campos Privados
- Propriedades
- Construtores
- Métodos
?
Estou curioso para saber se existe uma regra rígida e rápida sobre a ordem dos itens? Estou meio que em todo lugar. Quero seguir um padrão específico para poder fazer isso em qualquer lugar.
O verdadeiro problema é que minhas propriedades mais complexas acabam parecendo muito com métodos e elas parecem deslocadas no topo antes do construtor.
Alguma dica / sugestão?
c#
.net
coding-style
code-cleanup
code-structure
mmcdole
fonte
fonte
public
eprotected
.private
ou osinternal
membros (acredito). Ótima maneira de verpublic
eprotected
, no entanto. Podemos ver a fonte das classes do .NET Framework, aqui também referênciasource.microsoft.comRespostas:
De acordo com a documentação das regras da StyleCop, o pedido é o seguinte.
Dentro de uma classe, estrutura ou interface: (SA1201 e SA1203)
Em cada um desses grupos, faça o pedido por acesso: (SA1202)
Dentro de cada um dos grupos de acesso, ordene por estático e depois não estático: (SA1204)
Dentro de cada um dos grupos de campos estáticos / não estáticos, ordene somente leitura e depois não somente leitura: (SA1214 e SA1215)
Uma lista não enrolada tem 130 linhas, então não a desenrolarei aqui. A parte dos métodos desenrolada é:
A documentação observa que, se a ordem prescrita não for adequada - por exemplo, várias interfaces estão sendo implementadas e os métodos e propriedades da interface devem ser agrupados -, use uma classe parcial para agrupar os métodos e propriedades relacionados.
fonte
Em vez de agrupar por visibilidade ou por tipo de item (campo, propriedade, método etc.), que tal agrupar por funcionalidade?
fonte
Esta é uma pergunta antiga, mas ainda muito relevante, então acrescentarei o seguinte: Qual é a primeira coisa que você procura quando abre um arquivo de classe que pode ou não ter lido antes? Campos? Propriedades? Percebi por experiência que quase invariavelmente vou caçar os construtores, porque a coisa mais básica a entender é como esse objeto é construído.
Portanto, comecei a colocar os construtores em primeiro lugar nos arquivos de classe e o resultado foi psicologicamente muito positivo. A recomendação padrão de colocar os construtores atrás de várias outras coisas parece dissonante.
O próximo recurso de construtor primário no C # 6 fornece evidência de que o local natural para um construtor está no topo de uma classe - na verdade, os construtores primários são especificados mesmo antes da chave aberta.
É engraçado quanta diferença uma reordenação como essa faz. Isso me lembra de como as
using
instruções costumavam ser ordenadas - primeiro com os namespaces do sistema. O comando "Organizar usos" do Visual Studio usou esse pedido. Agora, osusing
s são apenas ordenados alfabeticamente, sem tratamento especial dado aos namespaces do sistema. O resultado parece mais simples e limpo.fonte
Não conheço um idioma ou padrão do setor, mas costumo colocar as coisas nessa ordem com cada seção agrupada em uma # região:
usando instruções
Namespace
Classe
Membros privados
Propriedades públicas
Construtores
Métodos públicos
Métodos particulares
fonte
Eu recomendaria usar os padrões de codificação da IDesign ou os listados no site de Brad Abram . Esses são os dois melhores que eu encontrei.
Brad diria ...
fonte
Como mencionado anteriormente, não há nada na linguagem C # que dite o layout, eu pessoalmente uso regiões e faço algo assim para uma classe média.
Faz sentido para mim de qualquer maneira
fonte
De StyleCop
campos privados, campos públicos, construtores, propriedades, métodos públicos, métodos privados
Como o StyleCop faz parte do processo de criação da MS, você pode vê-lo como um padrão de fato
fonte
Normalmente, tento seguir o próximo padrão:
Cada parte (estática e instância) consiste nos seguintes tipos de membros:
Em seguida, os membros são classificados por visibilidade (de menos para mais visível):
A ordem não é um dogma: classes simples são mais fáceis de ler, no entanto, classes mais complexas precisam de agrupamentos específicos ao contexto.
fonte
Minha preferência é ordenar por tipo e depois diminuir a visibilidade da seguinte forma
Sei que isso viola o Style Cop e, se alguém puder me dar uma boa razão para colocar os detalhes de implementação de um tipo antes de sua interface, estou disposto a mudar. Atualmente, tenho uma forte preferência por colocar os membros em último lugar.
Nota: Não uso campos públicos ou protegidos.
fonte
O mais próximo que você provavelmente encontrará é "Diretrizes de design, código gerenciado e o .NET Framework" ( http://blogs.msdn.com/brada/articles/361363.aspx ) por Brad Abrams
Muitos padrões são descritos aqui. A seção relevante é 2.8, eu acho.
fonte
as únicas diretrizes de codificação que vi sugeridas para isso são colocar os campos na parte superior da definição da classe.
Eu costumo colocar os construtores a seguir.
meu comentário geral seria que você deveria manter uma classe por arquivo e, se a classe for grande o suficiente para que a organização das propriedades versus métodos seja uma grande preocupação, qual é o tamanho da classe e você deve refatorá-la de qualquer maneira? representa várias preocupações?
fonte
Eu prefiro colocar os campos privados no topo junto com o (s) construtor (es), depois colocar os bits da interface pública depois disso, depois os bits da interface privada.
Além disso, se a definição de sua classe for longa o suficiente para que a ordem dos itens seja importante, provavelmente é um cheiro de código indicando que sua classe é muito volumosa e complexa e você deve refatorar.
fonte
Eu mantenho o mais simples possível (pelo menos para mim)
Enumerações
Declarações
Construtores
Substitui
Métodos
Propriedades
Manipulador de Eventos
fonte
Certamente não há nada na linguagem que a imponha de maneira alguma. Costumo agrupar as coisas por visibilidade (pública, depois protegida e depois privada) e usar #regions para agrupar as coisas relacionadas funcionalmente, independentemente de ser uma propriedade, método ou qualquer outra coisa. Os métodos de construção (sejam os reais ou as funções estáticas da fábrica) geralmente estão no topo, pois são a primeira coisa que os clientes precisam saber.
fonte
Sei que isso é antigo, mas meu pedido é o seguinte:
em ordem pública, protegida, privada, interna, abstrata
Também gosto de escrever propriedades como esta (em vez da abordagem abreviada)
fonte