Nomes de classes, structs e interfaces
Observação
Este conteúdo é reimpresso com permissão da Pearson Education, Inc. de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Essa edição foi publicada em 2008 e, desde então, o livro foi totalmente revisado na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
As diretrizes de nomenclatura a seguir se aplicam à nomenclatura de tipo geral.
✔️ NOMEIE classes e structs com substantivos ou frases nominais, usando PascalCasing.
Isso distingue nomes de tipo de métodos, que são nomeados com frases verbais.
✔️ NOMEIE interfaces com frases adjetivas ou, ocasionalmente, com substantivos ou frases nominais.
Substantivos e frases nominais devem ser usados raramente e podem indicar que o tipo deve ser uma classe abstrata e não uma interface.
❌ NÃO dê a nomes de classe um prefixo (por exemplo, "C").
✔️ CONSIDERE encerrar o nome de classes derivadas com o nome da classe base.
Isso é muito legível e explica claramente a relação. Alguns exemplos disso no código são: ArgumentOutOfRangeException
, que é uma espécie de Exception
; e SerializableAttribute
, que é uma espécie de Attribute
. No entanto, é importante adotar um julgamento razoável para aplicar essa diretriz: por exemplo, a classe Button
é uma espécie de evento Control
, embora Control
não apareça em seu nome.
✔️ FAÇA nomeações de interface de prefixo com a letra I, para indicar que o tipo é uma interface.
Por exemplo, IComponent
(substantivo descritivo), ICustomAttributeProvider
(frase nominal) e IPersistable
(adjetivo) são nomes de interface apropriados. Da mesma forma que com outros nomes de tipo, evite abreviações.
✔️ VERIFIQUE se os nomes diferem-se apenas pelo prefixo "I" no nome da interface quando você estiver definindo um par classe-interface em que a classe é uma implementação padrão da interface.
Nomes dos parâmetros de tipo genérico
Genéricos foram adicionados ao .NET Framework 2.0. O recurso introduziu um novo tipo de identificador nomeado como parâmetro de tipo.
✔️ NOMEIE parâmetros de tipo genérico com nomes descritivos, a menos que um nome de uma única letra seja autoexplicativo e um nome descritivo não agregue valor.
✔️ CONSIDERE usar T
como o nome do parâmetro de tipo em tipos com parâmetro de tipo de uma letra.
public int IComparer<T> { ... }
public delegate bool Predicate<T>(T item);
public struct Nullable<T> where T:struct { ... }
✔️ USE nomes de prefixo descritivos de parâmetro de tipo com T
.
public interface ISessionChannel<TSession> where TSession : ISession {
TSession Session { get; }
}
✔️ CONSIDERE indicar as restrições colocadas em um parâmetro de tipo no nome do parâmetro.
Por exemplo, um parâmetro restrito a ISession
pode ser nomeado como TSession
.
Nomes de tipos comuns
✔️ SIGA as diretrizes descritas na tabela a seguir ao nomear tipos derivados ou implementar determinados tipos do .NET Framework.
Tipo base | Diretriz de tipo derivada/implementação |
---|---|
System.Attribute |
✔️ ADICIONE o sufixo "Attribute" aos nomes de classes de atributo personalizadas. |
System.Delegate |
✔️ ADICIONE o sufixo "EventHandler" aos nomes de delegados que são usados em eventos. ✔️ ADICIONE o sufixo "Callback" a nomes de delegados diferentes daqueles usados como manipuladores de eventos. ❌ NÃO adicione o sufixo "Delegado" a um delegado. |
System.EventArgs |
✔️ ADICIONE o sufixo "EventArgs". |
System.Enum |
❌ NÃO derive dessa classe; em vez disso, use a palavra-chave com suporte em seu idioma; por exemplo, em C#, use a palavra-chave enum .❌ NÃO adicione o sufixo "Enum" ou "Flag". |
System.Exception |
✔️ ADICIONE o sufixo "Exception". |
IDictionary IDictionary<TKey,TValue> |
✔️ Adicione o sufixo "Dictionary". Observe que IDictionary é um tipo específico de coleção, mas essa diretriz tem precedência sobre as diretrizes de coleções mais gerais a seguir. |
IEnumerable ICollection IList IEnumerable<T> ICollection<T> IList<T> |
✔️ ADICIONE o sufixo "Collection". |
System.IO.Stream |
✔️ ADICIONE o sufixo "Stream". |
CodeAccessPermission IPermission |
✔️ ADICIONE o sufixo "Permission". |
Nomenclatura de enumerações
Os nomes de tipos enumerados (também chamados de enumeração) em geral devem seguir as regras de nomenclatura de tipo padrão (PascalCasing, etc.). No entanto, há diretrizes adicionais que se aplicam especificamente a enumerações.
✔️ USE um nome de tipo singular para uma enumeração, a menos que seus valores sejam campos de bits.
✔️ USE um nome de tipo plural para uma enumeração com campos de bits como valores, também chamados de enumeração de sinalizadores.
❌ NÃO use um sufixo "Enum" em nomes de tipo enumerado.
❌ NÃO use sufixos "Flag" ou "Flags" em nomes de tipo enumerado.
❌ NÃO use um prefixo em nomes de valor de enumeração (por exemplo, "ad" para enumerações ADO, "rtf" para enumerações de rich text etc.).
Portions © 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso com permissão da Pearson Education, Inc. das Diretrizes de Design do Framework: convenções, linguagens e padrões para bibliotecas do .NET reutilizável, 2ª edição por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da série de desenvolvimento do Microsoft Windows.