Share via


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