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: типы статических владельцев не должны иметь конструкторы