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 ad essere ereditato deve essere contrassegnato con il modificatore sealed per proibirne 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
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
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