CA1052: スタティック ホルダー型はシールされていなければなりません
TypeName |
StaticHolderTypesShouldBeSealed |
CheckId |
CA1052 |
[カテゴリ] |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
パブリック型またはプロテクト型に静的なメンバーしかなく、sealed (C# リファレンス) (NotInheritable (Visual Basic)) 修飾子付きで宣言されていません。
規則の説明
この規則では、静的なメンバーしかない型は継承するようにデザインされていないと想定しています。このような型には、派生型でオーバーライドできる機能がないためです。継承を意図していない型はsealed の修飾子によって基本型として使用を禁止するに設定する必要があります。
違反の修正方法
この規則違反を修正するには、型を sealed とマークします。.NET Framework 2.0 以前を対象とする場合は、型を static とマークする方法をお勧めします。この方法により、クラスが作成されないようにするためのプライベート コンストラクターを宣言せずに済みます。
警告を抑制する状況
型を継承する場合にのみ、この規則による警告を抑制します。sealed 修飾子がない場合、基本型として使用できる型と扱われます。
違反の例
Description
この規則に違反する型を次の例に示します。
コード
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 修飾子による修正
Description
型を 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();
}