Partager via


CA1052 : Les types de conteneurs statiques doivent être sealed

TypeName

StaticHolderTypesShouldBeSealed

CheckId

CA1052

Catégorie

Microsoft.CSharp

Modification avec rupture

Oui

Cause

Un type public ou protégé contient uniquement des membres statiques et n'est pas déclaré avec le modificateur sealed (référence C#) (NotInheritable (Visual Basic)).

Description de la règle

Cette règle suppose qu'un type qui contient uniquement des membres statiques n'est pas conçu pour être hérité, car il ne fournit pas toutes les fonctionnalités qui peuvent être substituées dans un type dérivé.Un type qui n'est pas destiné à être hérité doit être marqué avec le modificateur sealed pour empêcher son utilisation en tant que type de base.

Comment corriger les violations

Pour corriger une violation de cette règle, marquez le type en tant que sealed.Si vous ciblez .NET Framework 2.0 ou une version antérieure, une meilleure approche consiste à marquer le type comme static.Vous évitez ainsi de devoir déclarer un constructeur privé pour empêcher la création de la classe.

Quand supprimer les avertissements

Supprimez un avertissement de cette règle uniquement si le type est conçu pour être hérité.L'absence du modificateur sealed laisse entendre que le type est utile en tant que type de base.

Exemple de violation

Description

L'exemple suivant présente un type qui enfreint la règle.

Code

Imports System

Namespace DesignLibrary

    Public Class StaticMembers

        Private Shared someField As Integer  

        Shared Property SomeProperty As Integer 
            Get 
                Return someField
            End Get 
            Set
                someField = Value
            End Set 
        End Property 

        Private Sub New()
        End Sub 

        Shared Sub SomeMethod()
        End Sub 

    End Class 

End Namespace
using System;

namespace DesignLibrary
{
    public class StaticMembers
    {
        static int someField;

        public static int SomeProperty
        {
            get
            {
                return someField;
            }
            set
            {
                someField = value;
            }
        }

        StaticMembers() {}

        public static void SomeMethod() {}
    }
}
using namespace System;

namespace DesignLibrary
{
    public ref class StaticMembers
    {
        static int someField;

        StaticMembers() {}

    public:
        static property int SomeProperty
        {
            int get()
            {
                return someField;
            }

            void set(int value)
            {
                someField = value;
            }
        }

        static void SomeMethod() {}
    };
}

Résoudre avec le modificateur statique

Description

L'exemple suivant indique comment résoudre une violation de cette règle en marquant le type avec le modificateur static.

Code

using System; 

namespace DesignLibrary
{    
    public static class StaticMembers    
    {        
        private static int someField;     

        public static int SomeProperty        
        {            
            get { return someField; }            
            set { someField = value; }        
        }                

        public static void SomeMethod()         
        {        
        }         

        public static event SomeDelegate SomeEvent;    
    }     

    public delegate void SomeDelegate();
}

Règles connexes

CA1053 : Les types de conteneurs statiques ne doivent pas comporter de constructeur