Regra de regras de diretrizes de Design ampliada definido para código gerenciado
O conjunto de regras de regras de diretrizes de Design do Microsoft Extended expande as regras de diretriz de design básica para maximizar os problemas de usabilidade e a sustentabilidade são relatados.Ênfase adicional é colocado em diretrizes de nomenclatura.Você deve considerar incluindo esta regra definir se o seu projeto inclui o código da biblioteca ou se você quiser impor os mais altos padrões para escrever código que é fácil de manter.
As regras de diretriz de Design estendidos incluem todas as regras de diretriz de Design básico do Microsoft.As regras básicas de diretriz de Design incluem todas as regras do Microsoft mínimo recomendado.Para obter mais informações, consulte Regra de regras de diretrizes de Design básica definida para código gerenciado eGerenciado regras recomendado conjunto de regras para código gerenciado
A tabela a seguir descreve todas as regras no conjunto de regras de regras de diretrizes de Design do Microsoft estendido.
Regra |
Descrição |
---|---|
Os tipos que possuem campos descartáveis devem ser descartáveis |
|
Declarar os manipuladores de eventos corretamente |
|
Assemblies de marca com AssemblyVersionAttribute |
|
Métodos de interface devem ser chamados por tipos de filho |
|
Os tipos que possuem recursos nativos devem ser descartáveis |
|
Mover P/Invokes à classe NativeMethods |
|
Não ocultar métodos da classe base |
|
Implementar IDisposable corretamente |
|
Não aumente exceções em locais inesperados |
|
Evite aceleradores duplicados |
|
Os pontos de entrada de P/Invoke devem existir. |
|
P/Invokes não deverá ser visível |
|
Tipos de layout automático não devem ser visível em COM |
|
Chamar GetLastError imediatamente após P/Invoke. |
|
Tipos base do tipo visível COM devem estar visível em COM |
|
Métodos de registro COM devem ser correspondidos. |
|
Declarar P/Invokes corretamente |
|
Remover os finalizadores vazios |
|
Campos do tipo de valor devem ser portátil |
|
Declarações P/Invoke devem ser portátil |
|
Não bloquear em objetos com identidade fraco |
|
Analisar consultas SQL para vulnerabilidades de segurança |
|
Especificar o empacotamento para argumentos de seqüência de caracteres de P/Invoke. |
|
Revisão de segurança declarativos sobre tipos de valor |
|
Ponteiros não deverá ser visíveis |
|
Tipos protegidos não devem expor campos |
|
A segurança do método deve ser um superconjunto do tipo |
|
Métodos APTCA só deverá chamar métodos APTCA |
|
Tipos APTCA só devem estender tipos básicos de APTCA |
|
Não exponha indiretamente métodos com as demandas de link |
|
As demandas de link de substituição devem ser idênticas para basear |
|
Quebra automática de linha vulnerável finalmente tente cláusulas no exterior |
|
As demandas de link do tipo exigem demandas de herança |
|
Tipos de críticos de segurança não podem participar de equivalência de tipo |
|
Construtores padrão devem ser pelo menos tão importantes como construtores do tipo base padrão |
|
Delegados devem ligar para métodos com transparência consistente |
|
Métodos devem manter a transparência consistente quando os métodos base |
|
Métodos transparentes devem conter apenas IL verificável |
|
Métodos transparentes não devem chamar métodos com o atributo SuppressUnmanagedCodeSecurity |
|
Código Transparent não deve fazer referência a itens essenciais de segurança |
|
Métodos transparentes não devem atender a LinkDemands |
|
Os tipos devem ser pelo menos, tão importantes quanto seus tipos base e interfaces |
|
Métodos transparentes não podem usar a segurança asserts |
|
Métodos transparentes não devem chamar código nativo |
|
Relançar para preservar os detalhes de pilha |
|
Não dispor objetos várias vezes |
|
Inicializar o tipo de valor campos estáticos in-line |
|
Não marque os componentes de serviço com WebMethod |
|
Campos descartáveis devem ser descartados. |
|
Não chamar métodos substituíveis em construtores |
|
Tipos descartáveis devem declarar o finalizador |
|
Os finalizadores devem chamar o finalizador da classe base |
|
Implementar os construtores de serialização |
|
Sobrecarga de operador é igual a sobre a anulação de ValueType.Equals |
|
Pontos de entrada da marca Windows Forms com STAThread |
|
Marcar todos os campos não serializáveis |
|
Chamar métodos da classe base em tipos ISerializable |
|
Tipos de ISerializable de marca com o SerializableAttribute |
|
Implementar métodos de serialização corretamente |
|
Implementa ISerializable corretamente |
|
Fornecer argumentos corretos para métodos de formatação. |
|
Testar NaN corretamente |
|
Não é declarar membros estáticos em tipos genéricos |
|
Não expõem listas genéricas |
|
Usar instâncias do manipulador de evento genérico |
|
Métodos genéricos devem fornecer o parâmetro de tipo |
|
Evite os parâmetros de excessivos em tipos genéricos |
|
Não se aninham tipos genéricos em assinaturas de membros |
|
Use genéricos onde for apropriado |
|
Enums devem ter o valor zero |
|
Coleções devem implementar a interface genérica |
|
Considere passando tipos base como parâmetros |
|
Tipos abstratos não devem ter construtores |
|
É igual a operador de sobrecarga em sobrecarga, adicionar e subtrair |
|
Assemblies de marca com CLSCompliantAttribute |
|
Assemblies de marca com ComVisibleAttribute |
|
Atributos de marca com AttributeUsageAttribute |
|
Definir acessadores para argumentos de atributo |
|
Os indexadores não devem ser multidimensionais |
|
Use as propriedades onde for apropriado |
|
Substitua a matriz params de argumentos repetitivos |
|
Parâmetros padrão não devem ser usados. |
|
Marcar enums com FlagsAttribute |
|
Armazenamento de Enum deve ser Int32 |
|
Usar eventos onde for apropriado |
|
Não capturar os tipos de exceção geral |
|
Implementar os construtores de exceção padrão |
|
Tipos aninhados não deverá ser visíveis |
|
Implementações de ICollection com rigidez de tipos membros |
|
Substituir os métodos em tipos comparáveis |
|
Enumeradores devem ser fortemente tipados |
|
Listas são fortemente tipadas |
|
Fornecer ObsoleteAttribute mensagem |
|
Use o argumento integral ou seqüência de caracteres para os indexadores |
|
Propriedades não devem ser somente gravação |
|
Não sobrecarregar o operador equals em tipos de referência |
|
Não declarar membros protegidos em tipos lacrados |
|
Não declarar membros virtuais em tipos lacrados |
|
Declarar tipos em namespaces |
|
Não declare campos de instância visível |
|
Tipos de portador estático deverá ser lacrados. |
|
Tipos de portador estático não devem ter construtores |
|
Parâmetros da URI não devem ser seqüências de caracteres |
|
URI retornar valores não devem ser seqüências de caracteres |
|
Propriedades URI não devem ser seqüências de caracteres |
|
Sobrecargas URI de seqüência de caracteres chamada System. URI sobrecargas |
|
Tipos não devem estender a determinados tipos de base |
|
Os membros não devem expor a determinados tipos de concretos |
|
Exceções devem ser públicas |
|
Nomes de variáveis não devem corresponder a nomes de campo |
|
Evitar excessiva complexidade |
|
Identificadores devem diferir por mais de caso |
|
Identificadores não devem corresponder a palavras-chave |
|
Revise os parâmetros não utilizados |
|
Remover variáveis locais não utilizados |
|
Evite locals excessivas |
|
Inicializar embutido de campos estáticos do tipo de referência |
|
Evite código particular uncalled |
|
Evitar classes internas sem instância |
|
Evite atributos sem lacre |
|
Preferir irregulares de matrizes multidimensionais |
|
É igual a substituição e o operador equals em tipos de valor |
|
Propriedades não devem retornar arrays |
|
Testar usando o comprimento da seqüência de cadeias de caracteres vazias |
|
Membros da marca como static |
|
Evite campos particulares não utilizados |
|
Não aumente os tipos de exceção reservada |
|
Use o gerenciado equivalentes da API do Win32 |
|
Criar uma instância de exceções de argumento corretamente |
|
Campos não constante não deverá ser visíveis |
|
Não marque enums com FlagsAttribute |
|
Não aumente exceções em cláusulas de exceção |
|
Os finalizadores devem ser protegidos. |
|
Não diminuir a visibilidade de membro herdado |
|
Os membros devem diferir por tipo de retorno de mais de |
|
É igual a substituição na sobrecarga de operador equals |
|
Operador sobrecargas nomeou alternativas |
|
Os operadores devem ter sobrecargas simétricas |
|
Propriedades da coleção devem ser somente leitura |
|
Use params para argumentos de variáveis |
|
Passar objetos System. URI em vez de seqüências de caracteres |
|
Fornecer métodos de desserialização nos campos opcionais |
|
Evitar espaços para nome com alguns tipos |
|
Evite os parâmetros de saída |
|
Evite interfaces vazios |
|
Não passe os tipos por referência |
|
Validar os argumentos de métodos públicos |
|
Evitar a herança de excessiva |
|
Revisar os nomes de campo enganosas |
|
Evitar o código não é possível manter |
|
Evitar o acoplamento de excessivas de classe |
|
Não nomear valores enum "Reservada" |
|
Palavras compostas de seqüência de caracteres de recurso devem ser minúsculas corretamente |
|
Palavras compostas devem ser minúsculas corretamente |
|
Seqüências de recursos devem ser escritas corretamente |
|
Identificadores devem ser escritos corretamente |
|
Identificadores não devem conter sublinhados |
|
Identificadores devem ser minúsculas corretamente |
|
Identificadores devem ter o correto sufixo |
|
Identificadores não devem ter o sufixo incorreto |
|
Prefixo não valores de enum com nome de tipo |
|
Eventos não devem ter antes ou depois do prefixo |
|
Sinalizadores enums devem ter nomes no plural |
|
Identificadores devem ter o prefixo correto |
|
Somente os enums FlagsAttribute devem ter nomes no plural |
|
Nomes de parâmetro não devem corresponder a nomes de membros |
|
Identificadores não devem conter os nomes de tipo |
|
Nomes de propriedade não devem corresponder a métodos get |
|
Identificadores não devem ter o prefixo incorreto |
|
Nomes de tipo não devem corresponder a Namespaces |
|
Nomes de parâmetro devem corresponder à declaração de base |
|
Termos de uso preferido |
|
Literais devem ser escritos corretamente |