CA1052 : Les types de conteneurs statiques doivent être Static ou NotInheritable
Propriété | Value |
---|---|
Identificateur de la règle | CA1052 |
Titre | Les types de conteneurs statiques doivent être Static ou NotInheritable |
Catégorie | Conception |
Le correctif est cassant ou non cassant | Rupture |
Activée par défaut dans .NET 9 | Non |
Cause
Un type non abstrait contient uniquement des membres statiques (autres qu’un constructeur par défaut possible) et n’est pas déclaré avec le modificateur static ou Shared.
Par défaut, cette règle examine uniquement les types visibles en externe, mais elle est configurable.
Description de la règle
La règle CA1052 part du principe qu’un type qui contient uniquement des membres statiques n’est pas conçu pour être hérité, car le type ne fournit aucune fonctionnalité pouvant être substituée dans un type dérivé. Un type qui n’est pas destiné à être hérité doit être marqué avec le modificateur static
en C# afin d’interdire son utilisation comme type de base. En outre, son constructeur par défaut doit être supprimé. En Visual Basic, la classe doit être convertie en module.
Cette règle ne se déclenche pas pour les classes abstraites ou les classes qui ont une classe de base. En revanche, elle se déclenche pour les classes qui prennent en charge une interface vide.
Notes
Dans la dernière implémentation de l’analyseur de cette règle, elle englobe également les fonctionnalités de la règle CA1053.
Comment corriger les violations
Pour corriger une violation de cette règle, marquez le type comme static
et supprimez le constructeur par défaut (C#), ou convertissez-le en module (Visual Basic).
Quand supprimer les avertissements
Vous pouvez supprimer les violations dans les cas suivants :
- Le type est conçu pour être hérité. L’absence du modificateur
static
suggère que le type est utile en tant que type de base - Le type est utilisé comme argument de type. Les types statiques ne peuvent pas être utilisés comme arguments de type
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1052
// The code that's violating the rule is on this line.
#pragma warning restore CA1052
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1052.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Configurer le code à analyser
Utilisez l’option suivante pour configurer les parties de votre codebase sur lesquelles exécuter cette règle.
Vous pouvez configurer cette option pour cette règle uniquement, pour toutes les règles auxquelles elle s’applique ou pour toutes les règles de cette catégorie (Conception) auxquelles elle s’applique. Pour plus d’informations, consultez Options de configuration des règles de qualité du code.
Inclure des surfaces d’API spécifiques
Vous pouvez configurer les parties de votre codebase sur lesquelles exécuter cette règle, en fonction de leur accessibilité. Par exemple, pour spécifier que la règle doit s’exécuter uniquement sur la surface d’API non publique, ajoutez la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exemple de violation
L’exemple suivant montre un type qui enfreint la règle :
public class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}
Imports System
Namespace ca1052
Public Class StaticMembers
Shared Property SomeProperty As Integer
Private Sub New()
End Sub
Shared Sub SomeMethod()
End Sub
End Class
End Namespace
Correction avec le modificateur statique
L’exemple suivant montre comment corriger une violation de cette règle en marquant le type avec le modificateur static
en C# :
public static class StaticMembers
{
public static int SomeProperty { get; set; }
public static void SomeMethod() { }
}