CA1812 : Évitez les classes internes non instanciéesCA1812: Avoid uninstantiated internal classes

TypeNameTypeName AvoidUninstantiatedInternalClassesAvoidUninstantiatedInternalClasses
CheckIdCheckId CA1812CA1812
CategoryCategory Microsoft.PerformanceMicrosoft.Performance
Modification avec ruptureBreaking Change Sans ruptureNon-breaking

CauseCause

Une instance d'un type de niveau assembly n'est pas créée par le code au sein de l'assembly.An instance of an assembly-level type is not created by code in the assembly.

Description de la règleRule Description

Cette règle tente de localiser un appel à un des constructeurs du type et signale une violation si aucun appel n’est trouvé.This rule tries to locate a call to one of the constructors of the type, and reports a violation if no call is found.

Les types suivants ne sont pas examinés par cette règle :The following types are not examined by this rule:

  • Types de valeurValue types

  • Types abstraitsAbstract types

  • ÉnumérationsEnumerations

  • DéléguésDelegates

  • Types de tableau émis par le compilateurCompiler-emitted array types

  • Les types qui ne peut pas être instanciée et qui définissent static (Shared en Visual Basic) uniquement les méthodes.Types that cannot be instantiated and that define static (Shared in Visual Basic) methods only.

    Si vous appliquez System.Runtime.CompilerServices.InternalsVisibleToAttribute à l’assembly qui est en cours d’analyse, cette règle se produira pas sur les constructeurs sont marqués comme internal parce que vous ne pouvez pas savoir si un champ est utilisé par un autre friend assembly.If you apply System.Runtime.CompilerServices.InternalsVisibleToAttribute to the assembly that is being analyzed, this rule will not occur on any constructors that are marked as internal because you cannot tell whether a field is being used by another friend assembly.

    Même si vous ne pouvez pas contourner cette limitation dans Visual StudioVisual Studio analyse du Code, l’outil FxCop autonome externe se produira sur les constructeurs internes si chaque friend assembly est présent dans l’analyse.Even though you cannot work around this limitation in Visual StudioVisual Studio Code Analysis, the external stand-alone FxCop will occur on internal constructors if every friend assembly is present in the analysis.

Comment corriger les violationsHow to Fix Violations

Pour corriger une violation de cette règle, supprimez le type ou ajoutez le code qui l’utilise.To fix a violation of this rule, remove the type or add the code that uses it. Si le type contient uniquement des méthodes statiques, ajoutez une des valeurs suivantes au type pour empêcher le compilateur de l’émission d’un constructeur d’instance public par défaut :If the type contains only static methods, add one of the following to the type to prevent the compiler from emitting a default public instance constructor:

  • Un constructeur privé pour des types qui ciblent .NET Framework.NET Framework versions 1.0 et 1.1.A private constructor for types that target .NET Framework.NET Framework versions 1.0 and 1.1.

  • Le static (Shared en Visual Basic) qui ciblent des types de modificateur pour .NET Framework 2.0.NET Framework 2.0.The static (Shared in Visual Basic) modifier for types that target .NET Framework 2.0.NET Framework 2.0.

Quand supprimer les avertissementsWhen to Suppress Warnings

Il est possible de supprimer un avertissement de cette règle.It is safe to suppress a warning from this rule. Nous vous recommandons de supprimer cet avertissement dans les situations suivantes :We recommend that you suppress this warning in the following situations:

  • La classe est créée par le biais des méthodes de liaison tardive réflexion comme System.Activator.CreateInstance.The class is created through late-bound reflection methods such as System.Activator.CreateInstance.

  • La classe est créée automatiquement par le runtime ou ASP.NETASP.NET.The class is created automatically by the runtime or ASP.NETASP.NET. Par exemple, les classes qui implémentent System.Configuration.IConfigurationSectionHandler ou System.Web.IHttpHandler.For example, classes that implement System.Configuration.IConfigurationSectionHandler or System.Web.IHttpHandler.

  • La classe est passée comme un paramètre de type générique qui a une nouvelle contrainte.The class is passed as a generic type parameter that has a new constraint. Par exemple, l’exemple suivant génère cette règle.For example, the following example will raise this rule.

    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();  
    

    Dans ces situations, il est recommandé de que vous supprimez cet avertissement.In these situations, we recommended you suppress this warning.

CA1811 : Évitez le recours à du code privé non appeléCA1811: Avoid uncalled private code

CA1801 : Passez en revue les paramètres inutilisésCA1801: Review unused parameters

CA1804 : Supprimez les variables locales inutiliséesCA1804: Remove unused locals