Conjunto de regras de diretriz do design básico para código gerenciado
Você pode usar a regra das regras de diretrizes de design básico do Microsoft definida para enfatizar facilitar seu código entender e usar.Você deve incluir esta regra definida como se o seu projeto inclui o código de biblioteca ou se você deseja impor práticas recomendadas para o código que é fácil de manter.
As regras de diretrizes de design básico inclui todas as regras em conjunto mínimo da regra das regras do Microsoft Recommeded.Para obter uma lista das regras mínimas, consulte Conjunto de regras recomendadas gerenciado para código gerenciado.
A tabela a seguir descreve todas as regras no conjunto de regras das regras de diretrizes de design básico da Microsoft.
Regra |
Descrição |
---|---|
Tipos que possui campos descartáveis deve ser descartável |
|
Declare manipuladores de eventos corretamente |
|
Marcar os assemblies com AssemblyVersionAttribute |
|
Os métodos da interface devem estar acessíveis por tipos de filho |
|
Tipos que possui recursos nativos deve ser descartável |
|
Mover P/Invokes à classe de NativeMethods |
|
Não ocultar métodos da classe base |
|
Implemente corretamente IDisposable |
|
Não digite as exceções em locais inesperados |
|
Evite aceleradores duplicados |
|
Os pontos de entrada de P/Invoke devem existir |
|
P/Invokes não deve ser visível |
|
Os tipos de layout automático não deve ser visível COM |
|
Chame GetLastError imediatamente depois de P/Invoke |
|
Os tipos de base visíveis de tipo COM o devem ser visível COM |
|
Os métodos de registro COM o devem ser correspondidos |
|
Declare P/Invokes corretamente |
|
Remova os finalizers vazias |
|
Os campos do tipo de valor devem ser portáteis |
|
As declarações de P/Invoke devem ser portáteis |
|
Não bloqueie em objetos de identidade fraco |
|
Revise consultas SQL para vulnerabilidades de segurança |
|
Especifique que o marshaling para argumentos de cadeia de caracteres de P/Invoke |
|
Segurança declarativa revisão em tipos de valor |
|
Os ponteiros não devem ser visíveis |
|
Os tipos não seguros deve expor campos |
|
A segurança do método deve ser um superconjunto do tipo |
|
Os métodos de APTCA só devem chamar métodos de APTCA |
|
Os tipos de APTCA só devem estender tipos de base de APTCA |
|
Não expõe métodos indiretamente com as demandas de link |
|
As demandas do link de substituição devem ser idênticas com base |
|
Cláusulas vulneráveis de quebra automática finalmente tente externa |
|
As demandas do link do tipo exigem demandas de herança |
|
Os tipos críticos de segurança não podem participar da equivalência do tipo |
|
Os construtores padrão devem ser pelo menos críticos quanto construtores padrão do tipo de base |
|
O delega devem associar a transparência consistente com métodos |
|
Os métodos devem manter a transparência consistente ao substituir métodos de base |
|
Os métodos transparentes devem conter apenas o IL verificável |
|
Os métodos transparentes não devem chamar métodos com o atributo de SuppressUnmanagedCodeSecurity |
|
O código transparente não deve referenciar itens críticos de segurança |
|
Os métodos transparentes não devem satisfazer LinkDemands |
|
Os tipos devem ser pelo menos críticos quanto os tipos de base e interfaces |
|
Os métodos transparentes não podem usar segurança afirmam |
|
Os métodos transparentes não devem chamar em código nativo |
|
Lançar novamente para preservar detalhes da pilha |
|
Não remove objetos várias vezes |
|
Inicializar os campos estáticos de tipo de valor de tabela embutida |
|
Não marque componentes atendidos com WebMethod |
|
Os campos descartáveis devem ser removidos |
|
Não chame métodos overridable nos construtores |
|
Os tipos descartáveis devem declarar o finalizador |
|
Finalizers deve chamar o finalizador da classe base |
|
Construtores de serialização de ferramentas |
|
Operador de igual de sobrecarga em substituir ValueType.Equals |
|
Pontos de entrada do Windows Forms de marca a STAThread |
|
Marcar todos os campos não serializáveis |
|
Chamar métodos da classe base em tipos de ISerializable |
|
Marcar tipos de ISerializable com SerializableAttribute |
|
Implementar os métodos de serialização corretamente |
|
Implementar ISerializable corretamente |
|
Forneça argumentos corretos para formatação métodos |
|
Teste para NaN corretamente |
|
Não declarar membros estáticos em tipos genéricos |
|
Não expõe listas genéricas |
|
Use instâncias genéricas do manipulador de eventos |
|
Os métodos genéricos devem fornecer o parâmetro de tipo |
|
Evite parâmetros em excesso em tipos genéricos |
|
Aninhar não genérico em assinaturas de membro |
|
Use produtos genéricas onde apropriado |
|
Os enum devem ter o valor zero |
|
As coleções devem implementar a interface genérica |
|
Considere passar tipos de base como parâmetros |
|
Os tipos de sumário não devem ter construtores |
|
Carga do operador que equivale ao sobrecarregamento adicionam e subtraia-o |
|
Assemblies de marca a CLSCompliantAttribute |
|
Assemblies de marca a ComVisibleAttribute |
|
Atributos de marca a AttributeUsageAttribute |
|
Defina acessadores para argumentos de atributo |
|
Os indicadores não devem ser multidimensionais |
|
Use as propriedades onde apropriado |
|
Substitua os argumentos e repetitivos com a matriz de param |
|
Os parâmetros padrão não devem ser usados |
|
Enum de marca a FlagsAttribute |
|
O armazenamento de enum deve ser Int32 |
|
Use eventos quando apropriado |
|
Não capturar tipos de exceções gerais |
|
Implementar construtores padrão de exceção |
|
Os tipos aninhados não devem ser visíveis |
|
As implementações de ICollection digitaram altamente membros |
|
Métodos de substituição em tipos comparáveis |
|
Os enumeradores devem estar fortemente tipado |
|
Listas são digitadas altamente |
|
Fornecer a mensagem de ObsoleteAttribute |
|
Use a integral ou cadeia de caracteres do argumento para indicadores |
|
As propriedades não devem ser somente gravação |
|
Não iguais carga do operador em tipos de referência |
|
Não declarar membros protegidos em tipos selados |
|
Não declarar membros virtuais em tipos selados |
|
Declare namespaces em |
|
Não declarar campos visíveis da instância |
|
Os tipos estáticos de suporte devem ser selados |
|
Os tipos estáticos de suporte não devem ter construtores |
|
Os parâmetros de URI não devem ser cadeias de caracteres |
|
Os valores de retorno de URI não devem ser cadeias de caracteres |
|
As propriedades do URI não devem ser cadeias de caracteres |
|
As sobrecargas do URI de cadeia de caracteres chamam sobrecargas de System.Uri |
|
Os tipos não devem estender determinados tipos de base |
|
Os membros não deve expor determinados tipos concretos |
|
As exceções devem ser públicas |
|
Nomes de variáveis não devem corresponder aos nomes de campo |
|
Evite a complexidade excessiva |
|
Os identificadores devem ser diferentes por mais de casos |
|
Os identificadores não devem corresponder a palavra-chave |
|
Parâmetros não usada de revisão |
|
Remova os locais não usado |
|
Evite locais em excesso |
|
Inicializar os campos estáticos do tipo de referência embutida |
|
Evite código privado uncalled |
|
Evite ajustar uninstantiated classes internas |
|
Evite ajustar unsealed atributos |
|
Prefer entalhou matrizes sobre multidimensional |
|
Igual a substituição e iguais do operador em tipos de valor |
|
As propriedades não devem retornar matrizes |
|
Teste para cadeias de caracteres vazias usando o comprimento da cadeia de caracteres |
|
Membros da marca como estático |
|
Evite campos particulares não usado |
|
Não digite tipos de exceção permitidos |
|
Use equivalentes gerenciados da API do Win32 |
|
Criar uma instância do argumento exceções corretamente |
|
Os campos de não constante não devem ser visíveis |
|
Não marque enum com FlagsAttribute |
|
Não digite as exceções em cláusulas de exceção |
|
Finalizers deve ser protegido |
|
Não diminuir a visibilidade herdada do membro |
|
Os membros precisarem ser diferentes por mais do que o tipo de retorno |
|
Iguais de substituição em sobrecarregar iguais do operador |
|
As sobrecargas do operador denominado substituições |
|
Os operadores devem ter sobrecargas simétricas |
|
As propriedades da coleção devem ser somente leitura |
|
Param use para argumentos variáveis |
|
Objetos de passagem System.Uri em vez de cadeias de caracteres |
|
Fornecer métodos de desserialização para campos opcionais |