Поделиться через


CA1052: типы со статическими заполнителями должны быть запечатаны

TypeName

StaticHolderTypesShouldBeSealed

CheckId

CA1052

Категория

Microsoft.Design

Критическое изменение

Критическое изменение

Причина

Открытый или защищенный тип содержит только статические члены и не объявлен с модификатором sealed (Справочник по C#) (NotInheritable (Visual Basic)).

Описание правила

Это правило предполагает, что тип, содержащий только статические члены, не должен быть унаследованным, поскольку он не предоставляет какие-либо функциональные возможности, которые могут быть переопределены в производном типе. Тип, который не должен быть унаследованным, должен быть помечен модификатором sealed, чтобы его можно было использовать как базовый тип.

Устранение нарушений

Чтобы устранить нарушение этого правила, пометьте тип как sealed. Если целевой платформой является .NET Framework 2.0 или ранее, то лучшим вариантом будет пометить тип как static. Таким образом можно избежать необходимости объявлять закрытый конструктор для предотвращения создания класса.

Отключение предупреждений

Отключать предупреждение из этого правила следует только в том случае, если тип должен быть наследуемым. Отсутствие модификатора sealed подразумевает, что тип полезен как базовый.

Пример нарушения

Описание

В следующем примере показан тип, который нарушает данное правило.

Код

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

Исправление с использованием статического модификатора

Описание

В следующем примере показано, как исправить нарушение этого правила, пометив тип модификатором static.

Код

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

Связанные правила

CA1053: типы статических владельцев не должны иметь конструкторы