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