Statische Haltertypen sollten versiegelt sein
Aktualisiert: November 2007
TypeName |
StaticHolderTypesShouldBeSealed |
CheckId |
CA1052 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Ein öffentlicher oder geschützter Typ enthält nur statische Member und ist nicht mit dem sealed (C#-Referenz)-Modifzierer (NotInheritable) deklariert.
Regelbeschreibung
Diese Regel setzt voraus, dass ein Typ, der nur statische Member enthält, nicht für die Vererbung konzipiert ist, da der Typ keine Funktionen angibt, die in einem abgeleiteten Typ überschrieben werden können. Ein Typ, der nicht geerbt werden soll, sollte mit dem sealed-Modifizierer markiert werden, damit er als Basistyp verwendet werden kann.
Behandlung von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, kennzeichnen Sie den Typ als sealed. Wenn Sie für .NET Framework 2.0 oder früher entwickeln, ist die Markierung des Typs als static vorzuziehen. Auf diese Weise müssen Sie keinen privaten Konstruktor deklarieren, um die Erstellung der Klasse zu verhindern.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie eine Warnung dieser Regel nur dann, wenn der Typ für die Vererbung konzipiert ist. Die Abwesenheit des sealed-Modifizierers impliziert, dass der Typ als Basistyp verwendet werden kann.
Beispiel für einen Verstoß
Beschreibung
Im folgenden Beispiel wird ein Typ veranschaulicht, der gegen die Regel verstößt.
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() {}
};
}
Korrektur mit dem static-Modifizierer
Beschreibung
Das folgende Beispiel zeigt, wie eine Verletzung dieser Regeln korrigiert wird, indem der Typ mit dem static-Modifizierer markiert wird.
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();
}
Verwandte Regeln
Typen, die statische Member enthalten, sollten keine Konstruktoren aufweisen