Partilhar via


Evitar sem instância classes internas

TypeName

AvoidUninstantiatedInternalClasses

CheckId

CA1812

Category (Categoria)

Microsoft.desempenho

Quebrando alterar

Não separável

Causa

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

Descrição da regra

Esta regra tenta localizar uma telefonar para um dos construtores do tipo e reporta uma violação não se for encontrada nenhuma telefonar.

Os seguintes tipos não são examinados por esta regra:

  • Tipos de valor

  • Tipos abstratos

  • Enumerações

  • Delegados

  • Tipos de matriz emitida compilador

  • Tipos que não podem ser instanciados e definem static métodos.

Se você aplicar System.Runtime.CompilerServices.InternalsVisibleToAttribute ao conjunto de módulos (assembly) que estão sendo analisado, esta regra não será acionado em qualquer construtores marcados sistema autônomo internal porque você não pode determinar se um campo está sendo usado por outro friend assembly.

Mesmo que não é possível contornar essa limitação no Visual Studio A análise de código, o FxCop independente externo será acionado em construtores internos se cada friend assembly está presente na análise.

Como corrigir violações

Para corrigir uma violação dessa regra, remova o tipo ou adicione o código que o utiliza.Se o tipo contém apenas os métodos estático, adicione um dos seguintes ao tipo para impedir que o compilador emitindo um construtor de instância pública padrão:

  • Um construtor particular para tipos de direcionamento .NET Framework versões 1.0 e 1.1.

  • The static modificador para tipos de definição do público-alvo .NET Framework 2,0.

Quando suprimir avisos

É seguro eliminar um aviso da regra.Recomendamos que você suprime este aviso nas seguintes situações:

  • A classe é criada por meio de métodos de reflexão tardia, sistema autônomo CreateInstance.

  • A classe é criada automaticamente pelo tempo de execução ou ASP.NET. Por exemplo, classes que implementam System.Configuration.IConfigurationSectionHandler ou System.Web.IHttpHandler.

  • A classe é passada sistema autônomo um parâmetro de tipo genérico com uma nova restrição.Por exemplo, o exemplo a seguir será acionado essa regra:

    internal class MyClass
    {   
        public DoSomething()   
        {
        }
    } 
    public class MyGeneric<T> where T : new()
    {
        public T Create()
        {
            return new T();   
        }
    }
    // [...] 
    MyGeneric<MyClass> mc = new MyGeneric<MyClass>();
    mc.Create();
    

Nessas situações, é recomendável que suprimir este aviso.

Regras relacionadas

Evitar uncalled código privado

Examine os parâmetros não utilizados

Remover locais não utilizados