Partilhar via


Regras de conceção

As regras de design suportam a aderência às diretrizes de design do .NET Framework.

Nesta secção

Regra Description
CA1000: Não declarar membros estáticos em tipos genéricos Quando um membro estático de um tipo genérico é chamado, o argumento type deve ser especificado para o tipo. Quando um membro de instância genérica que não suporta inferência é chamado, o argumento type deve ser especificado para o membro. Nesses dois casos, a sintaxe para especificar o argumento type é diferente e facilmente confusa.
CA1001: Tipos que possuem campos descartáveis devem ser descartáveis Uma classe declara e implementa um campo de instância que é um tipo System.IDisposable e a classe não implementa IDisposable. Uma classe que declara um campo IDisposable possui indiretamente um recurso não gerenciado e deve implementar a interface IDisposable.
CA1002: Não exponha listas genéricas System.Collections.Generic.List<(Of <(T>))> é uma coleção genérica projetada para desempenho, não herança. Portanto, List não contém nenhum membro virtual. Em vez disso, as coleções genéricas projetadas para herança devem ser expostas.
CA1003: Usar instâncias genéricas do manipulador de eventos 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 é atribuível a EventArgs) e o assembly contendo destinos .NET Framework 2.0.
CA1005: Evite parâmetros excessivos em tipos genéricos Quanto mais parâmetros de tipo um tipo genérico contiver, mais difícil será saber e lembrar o que cada parâmetro de tipo representa. Geralmente é óbvio com um parâmetro de tipo, como na Lista<T>, e em certos casos com dois parâmetros de tipo, como no Dicionário<TKey, TValue>. No entanto, se existirem mais de dois parâmetros de tipo, a dificuldade torna-se demasiado grande para a maioria dos utilizadores.
CA1008: Enums deve ter valor zero O valor padrão de uma enumeração não inicializada, assim como outros tipos de valor, é zero. Uma enumeração atribuída não sinalizadores deve definir um membro usando o valor zero para que o valor padrão seja um valor válido da enumeração. Se uma enumeração que tem o atributo FlagsAttribute aplicado define um membro de valor zero, seu nome deve ser "None" para indicar que nenhum valor foi definido na enumeração.
CA1010: Coleções devem implementar interface genérica Para ampliar a usabilidade de uma coleção, implemente uma das interfaces de coleção genéricas. Em seguida, a coleção pode ser usada para preencher tipos de coleção genéricos.
CA1012: Tipos abstratos não devem ter construtores públicos Construtores em tipos abstratos podem ser chamados apenas por tipos derivados. Como os construtores públicos criam instâncias de um tipo, e você não pode criar instâncias de um tipo abstrato, um tipo abstrato que tem um construtor público é projetado incorretamente.
CA1014: Marcar assemblies com CLSCompliantAttribute A Common Language Specification (CLS) define restrições de nomenclatura, tipos de dados e regras às quais os assemblies devem estar em conformidade se forem usados em linguagens de programação. Um bom design determina que todos os assemblies indiquem explicitamente a conformidade com CLS usando CLSCompliantAttribute. Se esse atributo não estiver presente em um assembly, o assembly não será compatível.
CA1016: Marcar assemblies com AssemblyVersionAttribute O .NET usa o número da versão para identificar exclusivamente um assembly e para vincular a tipos em assemblies fortemente nomeados. O número da versão é usado em conjunto com a política de versão e do editor. Por padrão, os aplicativos são executados apenas com a versão de assembly com a qual foram criados.
CA1017: Marcar assemblies com ComVisibleAttribute ComVisibleAttribute determina como os clientes COM acessam o código gerenciado. Um bom design dita que as montagens indiquem explicitamente a visibilidade COM. A visibilidade COM pode ser definida para todo o conjunto e, em seguida, substituída para tipos individuais e membros do tipo. Se esse atributo não estiver presente, o conteúdo do assembly será visível para clientes COM.
CA1018: Marcar atributos com AttributeUsageAttribute Ao definir um atributo personalizado, marque-o usando AttributeUsageAttribute para indicar onde no código-fonte o atributo personalizado pode ser aplicado. O significado e o uso pretendido de um atributo determinarão seus locais válidos no código.
CA1019: Definir acessadores para argumentos de atributo Os atributos podem definir argumentos obrigatórios que devem ser especificados quando você aplica o atributo a um destino. Estes também são conhecidos como argumentos posicionais porque são fornecidos para atribuir construtores como parâmetros posicionais. Para cada argumento obrigatório, o atributo também deve fornecer uma propriedade somente leitura correspondente para que o valor do argumento possa ser recuperado no momento da execução. Os atributos também podem definir argumentos opcionais, que também são conhecidos como argumentos nomeados. Esses argumentos são fornecidos aos construtores de atributos pelo nome e devem ter uma propriedade de leitura/gravação correspondente.
CA1021: Evite parâmetros Passar tipos por referência (usando out ou ref) requer experiência com ponteiros, compreensão de como os tipos de valor e tipos de referência diferem e manipulação de métodos com vários valores de retorno. Além disso, a diferença entre os parâmetros out e ref não é amplamente compreendida.
CA1024: Use propriedades onde apropriado Um método público ou protegido tem um nome que começa com "Get", não usa parâmetros e retorna um valor que não é uma matriz. O método pode ser um bom candidato para se tornar uma propriedade.
CA1027: Marcar enums com FlagsAttribute Uma enumeração é um tipo de valor que define um conjunto de constantes nomeadas relacionadas. Aplique FlagsAttribute a uma enumeração quando suas constantes nomeadas puderem ser combinadas significativamente.
CA1028: O 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 System.Int32 é usado para armazenar o valor constante. Embora você possa alterar esse tipo subjacente, ele não é necessário ou recomendado para a maioria dos cenários.
CA1030: Use eventos quando apropriado Esta regra deteta métodos que têm nomes que normalmente seriam usados para eventos. Se um método é chamado em resposta a uma alteração de estado claramente definida, o método deve ser invocado por um manipulador de eventos. Os objetos que chamam o método devem gerar eventos em vez de chamar o método diretamente.
CA1031: Não capturar tipos de exceção gerais Não devem ser apanhadas exceções gerais. Pegue uma exceção mais específica ou relance a exceção geral como a última instrução no bloco catch.
CA1032: Implementar construtores de exceção padrão A falha em fornecer o conjunto completo de construtores pode dificultar o tratamento correto de exceções.
CA1033: Os métodos de interface devem ser chamáveis por tipos filho Um tipo visível externamente sem lacre fornece uma implementação de método explícito de uma interface pública e não fornece um método alternativo visível externamente que tenha o mesmo nome.
CA1034: Os tipos aninhados não devem estar visíveis Um tipo aninhado é um tipo declarado no escopo de outro tipo. Os tipos aninhados são úteis para encapsular detalhes de implementação privada do tipo que contém. Usados para essa finalidade, os tipos aninhados não devem ser visíveis externamente.
CA1036: Substituir métodos em tipos comparáveis Um tipo público ou protegido implementa a interface System.IComparable. Ele não substitui Object.Equals nem sobrecarrega o operador específico da linguagem para igualdade, desigualdade, menor ou maior que.
CA1040: Evite interfaces vazias As interfaces definem membros que fornecem um comportamento ou contrato de uso. A funcionalidade descrita pela interface pode ser adotada por qualquer tipo, independentemente de onde o tipo aparece na hierarquia de herança. Um tipo implementa uma interface fornecendo implementações para os membros da interface. Uma interface vazia não define nenhum membro; portanto, não define um contrato que possa ser implementado.
CA1041: Fornecer mensagem ObsoleteAttribute Um tipo ou membro é marcado usando um atributo System.ObsoleteAttribute que não tem sua propriedade ObsoleteAttribute.Message especificada. Quando um tipo ou membro marcado usando ObsoleteAttribute é compilado, a propriedade Message do atributo é exibida, o que fornece ao usuário informações sobre o tipo ou membro obsoleto.
CA1043: Use o argumento integral ou string para indexadores Os indexadores (ou seja, propriedades indexadas) devem usar tipos integrais ou de cadeia de caracteres para o índice. Esses tipos são normalmente usados para indexar estruturas de dados e aumentam a usabilidade da biblioteca. O uso do tipo de objeto deve ser restrito aos casos em que a integral específica ou o tipo de cadeia de caracteres não pode ser especificado em tempo de design.
CA1044: As propriedades não devem ser gravadas apenas Embora seja aceitável e muitas vezes necessário ter uma propriedade somente leitura, as diretrizes de design proíbem o uso de propriedades somente gravação. Isso ocorre porque permitir que um usuário defina um valor e, em seguida, impedir que o usuário visualize esse valor, não fornece nenhuma segurança. Além disso, sem acesso de leitura, o estado dos objetos compartilhados não pode ser visualizado, o que limita sua utilidade.
CA1045: Não passar tipos por referência Passar tipos por referência (usando out ou ref) requer experiência com ponteiros, compreensão de como os tipos de valor e tipos de referência diferem e manipulação de métodos com vários valores de retorno. Os arquitetos de bibliotecas que projetam para um público em geral não devem esperar que os usuários se tornem proficientes em trabalhar com parâmetros externos ou ref.
CA1046: Não sobrecarregar operador igual em tipos de referência Para tipos de referência, a implementação padrão do operador de igualdade é quase sempre correta. Por padrão, duas referências são iguais somente se apontarem para o mesmo objeto.
CA1047: Não declare membros protegidos em tipos selados Os tipos declaram membros protegidos para que os tipos herdados possam acessar ou substituir o membro. Por definição, os tipos selados não podem ser herdados, o que significa que os métodos protegidos em tipos selados não podem ser chamados.
CA1050: Declarar tipos em namespaces Os tipos são declarados em namespaces para evitar colisões de nomes e como uma maneira de organizar tipos relacionados em uma hierarquia de objetos.
CA1051: Não declarar campos de instância visíveis O uso principal de um campo deve ser como um detalhe de implementação. Os campos devem ser privados ou internos e devem ser expostos usando propriedades.
CA1052: Os tipos de suportes estáticos devem ser selados Um tipo público ou protegido contém apenas membros estáticos e não é declarado usando o modificador selado (C#) ou NotInheritable (Visual Basic). Um tipo que não se destina a ser herdado deve ser marcado usando o modificador selado para evitar seu uso como um tipo de base.
CA1053: Os tipos de suporte estático não devem ter construtores Um tipo público ou aninhado público declara apenas membros estáticos e tem 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 cadeia de caracteres deve chamar a sobrecarga de identificador de recurso uniforme (URI) usando o argumento string para segurança e proteção.
CA1054: Os parâmetros URI não devem ser cadeias de caracteres Se um método usa uma representação de cadeia de caracteres de um URI, uma sobrecarga correspondente deve ser fornecida que toma uma instância da classe URI, que fornece esses serviços de forma segura e protegida.
CA1055: Os valores de retorno de URI não devem ser cadeias de caracteres Esta regra pressupõe que o método retorna um URI. Uma representação de cadeia de caracteres de um URI é propensa a erros de análise e codificação e pode levar a vulnerabilidades de segurança. A classe System.Uri fornece esses serviços de forma segura.
CA1056: As propriedades de URI não devem ser cadeias de caracteres Esta regra pressupõe que a propriedade representa um URI. Uma representação de cadeia de caracteres de um URI é propensa a erros de análise e codificação e pode levar a vulnerabilidades de segurança. A classe System.Uri fornece esses serviços de forma segura.
CA1058: Os tipos não devem estender certos tipos de base Um tipo visível externamente estende certos tipos de base. Use uma das alternativas.
CA1060: Mover P/Invoca para NativeMethods classe Os métodos de invocação de plataforma, como aqueles marcados com os System.Runtime.InteropServices.DllImportAttribute métodos ou definidos usando a palavra-chave Declare no Visual Basic, acessam o código não gerenciado. Esses métodos devem ser da classe NativeMethods, SafeNativeMethods ou UnsafeNativeMethods.
CA1061: Não ocultar métodos de classe base Um método em um tipo base é oculto por um método nomeado de forma idêntica em um tipo derivado, quando a assinatura de parâmetro do método derivado difere apenas por tipos que são mais fracamente derivados do que os tipos correspondentes na assinatura de parâmetro do método base.
CA1062: Validar argumentos de métodos públicos Todos os argumentos de referência que são passados para métodos visíveis externamente devem ser verificados em relação a null.
CA1063: Implementar IDisposable corretamente Todos os tipos IDisposable devem implementar o padrão Dispose corretamente.
CA1064: As exceções devem ser públicas Uma exceção interna é visível apenas dentro de seu próprio escopo interno. Depois que a exceção estiver fora do escopo interno, somente a exceção de base poderá ser usada para capturar a exceção. Se a exceção interna for herdada de System.Exception, ou System.ApplicationException, System.SystemExceptiono código externo não terá informações suficientes para saber o que fazer com a exceção.
CA1065: Não gere exceções em locais inesperados Um método que não se espera que lance exceções lança uma exceção.
CA1066: Implemente o IEquatable ao substituir Igual Um tipo de valor substitui o método, mas não implementa IEquatable<T>o Equals .
CA1067: Substituir igual ao implementar o IEquatable Um tipo implementa , mas não substitui Equals o IEquatable<T>método.
CA1068: Os parâmetros CancellationToken devem vir por último Um método tem um parâmetro CancellationToken que não é o último parâmetro.
CA1069: Enums não deve ter valores duplicados Uma enumeração tem vários membros aos quais é explicitamente atribuído o mesmo valor constante.
CA1070: Não declarar campos de evento como virtuais Um evento semelhante a um campo foi declarado como virtual.