Condividi tramite


CA1052: I tipi che contengono membri statici devono essere sealed

TypeName

StaticHolderTypesShouldBeSealed

CheckId

CA1052

Category

Microsoft.Design

Breaking Change

Breaking

Causa

Un tipo pubblico o protetto contiene solo membri statici e non è dichiarato con il modificatore sealed (Riferimenti per C#) (NotInheritable (Visual Basic)).

Descrizione della regola

La regola presuppone che un tipo che contiene solo membri statici non sia progettato per essere ereditato perché il tipo non fornisce alcuna funzionalità sottoponibile a override in un tipo derivato. Un tipo non adatto a essere ereditato deve essere contrassegnato con il modificatore sealed per consentirne l'utilizzo come tipo di base.

Come correggere le violazioni

Per correggere una violazione di questa regola, contrassegnare il tipo come sealed. Se la destinazione è .NET Framework 2.0 o versioni precedenti, un approccio migliore consiste nel contrassegnare il tipo come static. In questo modo, si evita di dover dichiarare un costruttore privato per impedire la creazione della classe.

Esclusione di avvisi

Escludere un avviso da questa regola solo se il tipo è progettato per essere ereditato. L'assenza del modificatore sealed indica che il tipo può essere utilizzato come tipo di base.

Esempio di una violazione

Oggetto di descrizione

Nell'esempio riportato di seguito viene illustrato un tipo che viola la regola.

Codice

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

Correzione tramite modificatore statico

Oggetto di descrizione

Nell'esempio seguente viene illustrato come correggere una violazione di questa regola contrassegnando il tipo con il modificatore static.

Codice

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

Regole correlate

CA1053: I tipi che contengono membri statici non devono avere costruttori