Conjunto de regras de análise de código de regras de diretrizes de Design Microsoft Basic

Você pode usar o conjunto para enfocar a tornar seu código mais fácil de entender e usar de regras de regras de diretrizes de Design básico do Microsoft. Você deve incluir essa regra definir se o seu projeto inclui o código da biblioteca ou se você deseja aplicar as práticas recomendadas para o código que é fácil de manter.

As regras básicas de diretriz de Design incluem todas as regras no conjunto de regras do Microsoft mínima recomendável de regras. Para obter uma lista das regras mínimas, consulte Microsoft mínimo recomendado de conjunto de regras de análise de código de regras.

A tabela a seguir descreve todas as regras no conjunto de regras de regras de diretrizes de Design básico do Microsoft.

Regra

Descrição

CA1000: Não é declarar membros estáticos em tipos genéricos

Quando um membro estático de um tipo genérico é chamado, o argumento de tipo deve ser especificado para o tipo. Quando um membro de instância genérico que não oferece suporte à inferência de tipos é chamado, o argumento de tipo deve ser especificado para o membro. Nesses dois casos, a sintaxe para especificar o argumento de tipo é diferente e facilmente confundidos.

CA1002: Não expõem listas genéricas

System.Collections.Generic.List < (de <(T>) >) é uma coleção genérica, projetada para desempenho, não a herança. Portanto, a lista não contém quaisquer membros virtuais. Em vez disso, as coleções genéricas que sejam destinam a herança devem ser expostas.

CA1003: Usar instâncias do manipulador de evento genérico

Um tipo contém um delegado que retorna void, cuja assinatura contém dois parâmetros (o primeiro um objeto e o segundo um tipo que pode ser atribuído a EventArgs) e os destinos do assembly que contém.NET Framework 2.0.

CA1004: Métodos genéricos devem fornecer o parâmetro de tipo

Inferência é como o argumento de tipo de um método genérico é determinado pelo tipo de argumento passado para o método, em vez de pela especificação do argumento de tipo explícita. Para habilitar a inferência de tipos, a assinatura de parâmetro de um método genérico deve incluir um parâmetro que é do mesmo tipo do parâmetro de tipo para o método. Nesse caso, o argumento de tipo não precisará ser especificada. Ao usar dedução para todos os parâmetros de tipo, a sintaxe para chamada dos métodos de instância genérica e não genéricas é idêntica; Isso simplifica a usabilidade de métodos genéricos.

CA1005: Evitar o excesso parâmetros em tipos genéricos

Quanto mais digite os parâmetros que contém um tipo genérico, mais difícil é saber e lembre-se de que cada tipo de parâmetro representa. É óbvio geralmente com um parâmetro de tipo, como na lista <T> e, em certos casos com dois parâmetros de tipo, como em um Dictionary < TKey, TValue >. No entanto, se houver mais de dois parâmetros de tipo, a dificuldade fica muito grande para a maioria dos usuários.

CA1006: Não se aninham tipos genéricos em assinaturas de membro

Um argumento de tipo aninhado é um argumento de tipo que também é um tipo genérico. Para chamar um membro cuja assinatura contém um argumento de tipo aninhado, o usuário deve criar uma instância de um tipo genérico e passar esse tipo para o construtor de um segundo tipo genérico. O procedimento necessário e a sintaxe é complexos e deve ser evitado.

CA1007: Use genéricos onde for apropriado

Um método visível externamente contém um parâmetro de referência do tipo Object. Uso de um método genérico permite que todos os tipos, sujeita às restrições, a serem passados para o método sem a projeção primeiro o tipo para o tipo de parâmetro de referência.

CA1008: Enums devem ter o valor zero

O valor padrão de uma enumeração inicializada, assim como outros tipos de valor é zero. Uma enumeração de não-atribuídos sinalizadores deve definir um membro com o valor de zero para que o valor padrão é um valor válido da enumeração. Se uma enumeração que tem o atributo FlagsAttribute aplicado define um membro com valor zero, seu nome deve ser "None" para indicar que os valores não foram definido na enumeração.

CA1010: Coleções devem implementar a interface genérica

Para ampliar a usabilidade de uma coleção, implemente uma das interfaces de coleção genérica. Em seguida, a coleção pode ser usada para preencher os tipos de coleção genérica.

CA1011: Considere passando tipos base como parâmetros

Quando um tipo base é especificado como um parâmetro em uma declaração de método, qualquer tipo derivado do tipo base pode ser passado como o argumento correspondente para o método. Se a funcionalidade adicional fornecida pelo tipo derivado de parâmetro não for necessária, o uso do tipo base permite que o método a ser mais amplamente usado.

CA1012: Tipos abstratos não devem ter construtores

Construtores de tipos abstratos só podem ser chamados por tipos derivados. Porque os construtores públicos criar instâncias de um tipo e não é possível criar instâncias de um tipo abstrato, um tipo abstrato com um construtor público incorretamente foi projetado.

CA1013: É igual a operador de sobrecarga em sobrecarga, adicionar e subtrair

Um tipo de público ou protegido implementa os operadores de adição ou subtração sem implementar o operador de igualdade.

CA1014: Assemblies de marca com CLSCompliantAttribute

Especificação de linguagem comum (CLS) define as restrições de nomeação, tipos de dados e regras às quais assemblies devem obedecer se estiverem a ser usado em linguagens de programação. Um bom design determina que todos os assemblies indicam explicitamente a compatibilidade com CLS com CLSCompliantAttribute. Se esse atributo não estiver presente em um assembly, o assembly não é compatível com.

CA1017: Assemblies de marca com ComVisibleAttribute

ComVisibleAttribute determina como clientes COM acessam a código gerenciado. Um bom design determina que os assemblies indicam explicitamente a visibilidade de COM. Visibilidade de COM pode ser definida para o conjunto completo e, então, substituída para tipos individuais e os membros de tipo. Se esse atributo não estiver presente, o conteúdo do assembly é visível para os clientes COM.

CA1018: Atributos de marca com AttributeUsageAttribute

Ao definir um atributo personalizado, marcá-la usando AttributeUsageAttribute para indicar onde o código-fonte do atributo personalizado pode ser aplicado. O significado de um atributo e o uso pretendido determinará seus locais válidos no código.

CA1019: Definir acessadores para argumentos de atributo

Atributos podem definir argumentos obrigatórios que devem ser especificados quando você aplicar o atributo para um destino. Eles também são conhecidos como argumentos posicionais porque eles são fornecidos para construtores de atributo como parâmetros posicionais. Para cada argumento obrigatório, o atributo também deve fornecer uma propriedade correspondente de somente leitura para que o valor do argumento pode ser recuperado em tempo de execução. Atributos também podem definir argumentos opcionais, que também são conhecidos como argumentos nomeados. Esses argumentos são fornecidos para os construtores de atributo por nome e devem ter uma propriedade de leitura/gravação correspondente.

CA1023: Os indexadores não devem ser multidimensionais

Os indexadores (isto é, propriedades indexadas) devem usar um único índice. Os indexadores multidimensionais podem reduzir significativamente a usabilidade da biblioteca.

CA1024: Use as propriedades onde for apropriado

Um método público ou protegido tem um nome que começa com "Get", sem parâmetros e retorna um valor que não é uma matriz. O método pode ser um bom candidato para se tornar uma propriedade.

CA1025: Substitua a matriz params de argumentos repetitivos

Use uma matriz de parâmetros em vez de argumentos repetidos quando o número exato de argumentos é desconhecido e quando os argumentos de variáveis são os mesmos digite, ou podem ser passados como o mesmo tipo.

CA1026: Os parâmetros padrão não devem ser usados.

Os métodos que usam parâmetros padrão são permitidos na especificação de CLS (Common Language); Entretanto, o CLS permite compiladores ignorar os valores atribuídos a esses parâmetros. Para manter o comportamento desejado, através de linguagens de programação, os métodos que usam parâmetros padrão devem ser substituídos com sobrecargas de método para fornecem os parâmetros padrão.

CA1027: Marcar enums com FlagsAttribute

Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionadas. Aplica FlagsAttribute em uma enumeração quando suas constantes nomeadas podem ser combinados de forma significativa.

CA1028: Armazenamento de enum deve ser Int32

Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionadas. Por padrão, o tipo de dados de Int32 é usado para armazenar o valor da constante. Embora, por exemplo, você pode alterar o tipo de base, não é necessária ou recomendada para a maioria dos cenários.

CA1030: Usar eventos onde for apropriado

Essa regra detecta os métodos que possuem nomes que normalmente seriam usados para eventos. Se um método é chamado em resposta a uma alteração de estado claramente definido, o método deve ser chamado por um manipulador de eventos. Objetos que chame o método devem disparar eventos em vez de chamar o método diretamente.

CA1031: Não capturar os tipos de exceção geral

Exceções gerais não devem ser detectadas. Capturar uma exceção mais específica ou relançar a exceção geral como a última instrução no bloco catch.

CA1032: Implementar os construtores de exceção padrão

Falha ao fornecer o conjunto completo de construtores pode dificultar o lidar corretamente com exceções.

CA1034: Tipos aninhados não deverá ser visíveis

Um tipo aninhado é um tipo declarado no escopo de outro tipo. Tipos aninhados são úteis para encapsular os detalhes de implementação privada do tipo recipiente. Usado para essa finalidade, tipos aninhados não devem ser visíveis externamente.

CA1035: Implementações de ICollection com rigidez de tipos membros

Esta regra exige implementações de ICollection para fornecer membros fortemente tipados para que os usuários não precisam converter argumentos para o tipo de objeto quando usarem a funcionalidade fornecida pela interface. Esta regra pressupõe que o tipo que implementa ICollection faz isso para gerenciar uma coleção de instâncias de um tipo que é mais forte que o objeto.

CA1036: Substituir os métodos de tipos comparáveis

Um tipo de público ou protegido implementa a interface System. IComparable. Ele não substitui Object. Equals nem oferece sobrecarregar a igualdade, desigualdade, menor ou maior que o operador de específicos do idioma.

CA1038: Enumeradores devem ser fortemente tipados

Esta regra exige implementações de IEnumerator também fornecer uma versão fortemente tipada da propriedade atual para que os usuários não precisam converter o valor de retorno para o tipo de alta segurança quando usarem a funcionalidade fornecida pela interface.

CA1039: Listas são fortemente tipadas

Esta regra exige implementações de IList para fornecer membros fortemente tipados para que os usuários não precisam converter argumentos para o tipo Object quando usarem a funcionalidade fornecida pela interface.

CA1041: Fornecer ObsoleteAttribute mensagem

Um tipo ou membro é marcado com um atributo de System. ObsoleteAttribute não tem sua propriedade ObsoleteAttribute.Message especificada. Quando um tipo ou membro marcado com ObsoleteAttribute é compilado, a propriedade do atributo de mensagem é exibida, fornecendo as informações do usuário sobre o tipo obsoleto ou membro.

CA1043: Use o argumento integral ou de seqüência de caracteres para indexadores

Os indexadores (isto é, propriedades indexadas) devem usar tipos integrais ou de seqüência de caracteres para o índice. Esses tipos são normalmente usados para estruturas de dados de indexação e aumentar a facilidade de uso da biblioteca. O uso do tipo de objeto deve ser restrito a esses casos onde o tipo específico de integral ou seqüência de caracteres não pode ser especificado em tempo de design.

CA1044: Propriedades não devem ser somente gravação

Embora seja aceitável e freqüentemente é necessário ter uma propriedade somente leitura, as diretrizes de design proíbem usando as propriedades somente para gravação porque o que permite ao usuário definir um valor e, em seguida, impedindo que o usuário exibir esse valor não fornece nenhuma segurança. Além disso, sem acesso de leitura, o estado de objetos compartilhados não pode ser exibido, que limita sua utilidade.

CA1046: Não sobrecarregar o operador de equals em tipos de referência

A implementação padrão do operador de igualdade para tipos de referência, quase sempre está correta. Por padrão, as duas referências são iguais, apenas se eles apontam para o mesmo objeto.

CA1047: Não é declarar membros protegidos em tipos sealed

Tipos de declarar membros protegidos para que tipos de herança possa acessar ou substituir o membro. Por definição, selados tipos podem não ser herdados, que significa que os métodos protegidos lacrado tipos não podem ser chamados.

CA1048: Não é declarar membros virtuais em tipos sealed

Tipos de declarar métodos como virtual para que tipos de herança pode substituir a implementação do método virtual. Por definição, um tipo selado não pode ser herdado. Isso torna um método virtual do tipo sealed sem sentido.

CA1050: Declarar tipos em namespaces

Tipos são declarados dentro de espaços para nome para evitar conflitos de nome e como uma forma de organizar os tipos relacionados em uma hierarquia de objeto.

CA1051: Não declarar os campos de instância visível

O principal uso de um campo deve ser como um detalhe de implementação. Os campos devem ser privadas ou internas e devem ser expostos por meio de propriedades.

CA1052: Tipos de portador estático deverá ser lacrados.

Um tipo de público ou protegido contém apenas membros estáticos e não é declarado com o modificador de selada (C# Reference) (NotInheritable). Um tipo que não pretende ser herdadas deve ser marcado com o modificador sealed para impedir seu uso como um tipo base.

CA1053: Tipos de portador estático não devem ter construtores

Um tipo de público público ou aninhado declara apenas membros estáticos e possui um construtor padrão público ou protegido. O construtor é desnecessário porque chamar membros estáticos não requer uma instância do tipo. A sobrecarga de seqüência de caracteres deve chamar a sobrecarga URI usando o argumento de seqüência de caracteres para proteção e segurança.

CA1054: Parâmetros da URI não devem ser seqüências de caracteres

Se um método leva uma representação de seqüência de caracteres de um URI, uma sobrecarga correspondente deve ser fornecido que leva a uma instância da classe URI, que fornece esses serviços de maneira segura e protegida.

CA1055: URI retornar valores não devem ser seqüências de caracteres

Esta regra pressupõe que o método retorna um identificador de recursos uniforme (URI). Uma representação de seqüência de caracteres de um URI está sujeita a análise e erros de codificação e pode levar a vulnerabilidades de segurança. A classe System. URI fornece esses serviços de maneira segura e protegida.

CA1056: Propriedades URI não devem ser seqüências de caracteres

Esta regra pressupõe que a propriedade representa um identificador de recursos uniforme (URI). Uma representação de seqüência de caracteres de um URI está sujeita a análise e erros de codificação e pode levar a vulnerabilidades de segurança. A classe System. URI fornece esses serviços de maneira segura e protegida.

CA1057: Sobrecargas URI de seqüência de caracteres chamada System. URI sobrecargas

Um tipo declara sobrecargas do método que diferem somente de substituição de um parâmetro de seqüência de caracteres com um parâmetro System. URI. A sobrecarga que aceita o parâmetro de seqüência de caracteres não chamar a sobrecarga que aceita o parâmetro URI.

CA1058: Tipos de não devem estender a determinados tipos de base

Um tipo visível externamente estende a determinados tipos de base. Use uma das alternativas.

CA1059: Os membros não devem expor a determinados tipos de concretos

Um tipo concreto é um tipo que tem uma implementação completa e, portanto, pode ser instanciado. Para habilitar o uso difundido do membro, substitua o tipo concreto com a interface sugerida.

CA1064: Exceções devem ser públicas

Uma exceção interna só é visível dentro de seu próprio escopo interno. Depois que a exceção cair fora do escopo interno, a base de exceção pode ser usado para capturar a exceção. Se a exceção interna é herdada do T:System.Exception, T:System.SystemException ou T:System.ApplicationException, o código externo não terá informações suficientes para saber o que fazer com a exceção.

CA1500: Nomes de variáveis não devem corresponder a nomes de campo

Um método de instância declara um parâmetro ou uma variável local cujo nome corresponde a um campo de instância do tipo declarativo, levando a erros.

CA1502: Evite a complexidade excessiva

Esta regra mede o número de caminhos independentes linearmente através do método, o que é determinado pelo número e a complexidade das ramificações condicionais.

CA1708: Identificadores devem diferir por mais de caso

Identificadores de namespaces, tipos, membros e parâmetros não só diferem caso pois linguagens que direcionam o common language runtime não são necessárias para diferenciar maiúsculas de minúsculas.

CA1716: Identificadores não devem corresponder a palavras-chave

Um nome de namespace ou um nome de tipo corresponde a uma palavra reservada em uma linguagem de programação. Identificadores de espaços para nomes e tipos de não devem corresponder a palavras-chave definidas por linguagens que visam common language runtime.

CA1801: Revise os parâmetros não utilizados

Uma assinatura do método inclui um parâmetro que não é usado no corpo do método.

CA1804: Remover locals não utilizados

Variáveis locais não utilizadas e atribuições desnecessárias aumentam o tamanho de um assembly e diminuem o desempenho.

CA1809: Evite locals excessivas

Uma otimização de desempenho comum é armazenar um valor em um registro do processador, em vez de memória, o que é conhecido como "enregistering o valor" (em inglês). Para aumentar a possibilidade de que todas as variáveis locais são não registrados, limite o número de variáveis locais para 64.

CA1810: Inicializar embutido de campos estáticos do tipo de referência

Quando um tipo declara um construtor estático explícito, o compilador just-in-time (JIT) adiciona uma verificação para cada método e instância o construtor estático do tipo, para certificar-se de que o construtor estático era anteriormente chamado. Verificações do construtor estático podem diminuir o desempenho.

CA1811: Evite código privado de uncalled

Membro (nível de assembly) privado ou interno não tem os chamadores no assembly, ele não é invocado pelo common language runtime e ele não é invocado por um delegado.

CA1812: Evite sem instância classes internas

Uma instância de um tipo de nível de assembly não é criada pelo código no assembly.

CA1813: Evite atributos sem lacre

A.NET Framework class library fornece métodos para recuperar os atributos personalizados. Por padrão, esses métodos pesquisar a hierarquia de herança de atributo. Lacrar o atributo elimina a pesquisa por meio da hierarquia de herança e pode melhorar o desempenho.

CA1814: Preferir irregulares de matrizes multidimensionais

Uma matriz denteada é uma matriz cujos elementos são matrizes. As matrizes que compõem os elementos podem ser de diferentes tamanhos, resultando em menos perda de espaço para alguns conjuntos de dados.

CA1815: É igual a substituição e o operador equals em tipos de valor

Para tipos de valor, a implementação de Equals herdada usa a biblioteca de reflexão e compara o conteúdo de todos os campos. A reflexão é dispendiosa e comparar todos os campos de igualdade talvez seja desnecessário. Se você espera que os usuários para comparar instâncias de classificar ou usar instâncias como chaves de tabela de hash, seu tipo de valor deve implementar Equals.

CA1819: Propriedades não devem retornar arrays

Arrays retornados pelas propriedades não são protegidos contra gravação, mesmo se a propriedade é somente leitura. Para manter a matriz à prova de violação, a propriedade deve retornar uma cópia da matriz. Normalmente, os usuários não compreenderá as implicações de desempenho adverso de chamar essa propriedade.

CA1820: Testar usando o comprimento da seqüência de cadeias de caracteres vazias

Comparando seqüências de caracteres usando a propriedade String. length ou string. IsNullOrEmpty método é significativamente mais rápido do que usando igual.

CA1821: Remover os finalizadores vazios

Sempre que possível, evite finalizadores causa da sobrecarga de desempenho adicional envolvida no controle de tempo de vida do objeto. Um finalizador vazio provoca adicionado a sobrecarga sem qualquer benefício.

CA1822: Membros da marca como estático

Membros que não acessar métodos de instância de dados ou chamada de instância podem ser marcados como estáticos (compartilhado no Visual Basic). Depois de marcar os métodos como estático, o compilador emitirá a sites de chamada não-virtual para esses membros. Isso pode lhe um ganho de desempenho mensuráveis para o código de desempenho confidenciais.

CA1823: Evite campos particulares não utilizados

Campos particulares foram detectados que não parecem ser acessados no assembly.

CA2201: Não aumente os tipos de exceção reservada

Isso torna difícil detectar e depurar o erro original.

CA2205: Use o gerenciado equivalentes da API do Win32

Uma plataforma chamar método está definido e um método com a funcionalidade equivalente existe na.Biblioteca de classes do NET Framework.

CA2208: Criar uma instância de exceções do argumento corretamente

É feita uma chamada ao construtor padrão (sem parâmetros) de um tipo de exceção que é ou deriva de ArgumentException ou um argumento de seqüência de caracteres incorreto é passado para um construtor parametrizado de um tipo de exceção que é ou deriva de ArgumentException.

CA2211: Os campos não constante não deverá ser visíveis

Os campos estáticos que não são constantes nem são somente leitura não thread-safe. Acesso a tal campo deve ser cuidadosamente controlado e requer técnicas avançadas de programação para sincronizar o acesso ao objeto de classe.

CA2217: Não marque enums com FlagsAttribute

Uma enumeração visível externamente é marcada com FlagsAttribute e tem um ou mais valores que não são potências de dois, ou uma combinação de outros valores definidos na enumeração.

CA2219: Não aumente exceções em cláusulas de exceção

Quando uma exceção em um finalmente ou cláusula de falhas, new exception oculta a exceção de ativa. Quando uma exceção é gerada em uma cláusula de filtro, o tempo de execução silenciosamente captura a exceção. Isso torna difícil detectar e depurar o erro original.

CA2221: Os finalizadores devem ser protegidos.

Os finalizadores devem usar o modificador de acesso da família.

CA2222: Não diminuir a visibilidade de membro herdado

Você não deve alterar o modificador de acesso para membros herdados. A alteração de um membro herdado para private não impede que chamadores acessem a implementação de classe base do método.

CA2223: Os membros devem diferir por tipo de retorno de mais de

Embora o common language runtime permite o uso de tipos de retorno para diferenciar entre membros idênticos, esse recurso não está no Common Language Specification, nem é um recurso comum do.NET linguagens de programação.

CA2224: É igual a substituição na sobrecarga de operador equals

Um tipo público implementa o operador de igualdade, mas não substitui Object. Equals.

CA2225: Sobrecargas de operador nomeou alternativas

Uma sobrecarga de operador foi detectada e o método alternativo nomeado esperado não foi encontrado. O membro nomeado de alternativo fornece acesso para a mesma funcionalidade que o operador e é fornecido para os desenvolvedores que programam em idiomas que não oferecem suporte a operadores sobrecarregados.

CA2226: Os operadores devem ter sobrecargas simétricas

Um tipo implementa a igualdade ou desigualdade e não implementa o operador oposto.

CA2227: Propriedades da coleção devem ser somente leitura

Uma propriedade de coleção gravável permite que um usuário substituir a coleção com uma coleção diferente. Uma propriedade somente leitura pára a coleção seja substituída, mas ainda permite que os membros individuais sejam definidas.

CA2230: Use params para argumentos de variáveis

Um tipo de público ou protegido contém um método público ou protegido que usa a convenção de chamada VarArgs em vez da palavra-chave params.

CA2231: Sobrecarga de operador equals em substituição a ValueType.Equals

Um tipo de valor substitui Object. Equals, mas não implementa o operador de igualdade.

CA2234: Passar objetos de System. URI em vez de seqüências de caracteres

É feita uma chamada para um método que possui um parâmetro de seqüência de caracteres cujo nome contém "uri", "uri", "urn", "URN", "url" ou "URL". O tipo declarativo do método contém uma sobrecarga de método correspondente que possui um parâmetro System. URI.

CA2239: Fornecer métodos de desserialização de campos opcionais

Um tipo tem um campo que está marcado com o atributo OptionalFieldAttribute e o tipo não fornece métodos de manipulação de eventos de desserialização.