CA1052: 정적 소유자 형식은 sealed여야 합니다.
TypeName |
StaticHolderTypesShouldBeSealed |
CheckId |
CA1052 |
범주 |
Microsoft.Design |
변경 수준 |
주요 변경 |
원인
public 또는 protected 형식이 정적 멤버만 포함하며 sealed(C# 참조)(NotInheritable(Visual Basic)) 한정자로 선언되지 않았습니다.
규칙 설명
이 규칙에서는 정적 멤버만 포함하는 형식은 파생된 형식에서 재정의할 수 있는 기능을 제공하지 않기 때문에 상속될 수 없다고 가정합니다.상속을 고려 되는 형식으로 표시 되어야의 sealed 한정자를 기본 형식으로 사용을 금지 합니다.
위반 문제를 해결하는 방법
이 규칙 위반 문제를 해결하려면 형식을 sealed로 표시합니다..NET Framework 2.0 이하를 대상으로 하는 경우에는 형식을 static으로 표시하는 방법이 더 좋습니다.이 방법을 사용하면 클래스가 만들어지지 않도록 하기 위해 private 생성자를 선언하지 않아도 됩니다.
경고를 표시하지 않는 경우
형식을 상속 가능하도록 디자인한 경우에는 이 규칙에서 경고를 표시하지 않도록 설정합니다.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 한정자를 사용한 해결 방법
설명
다음 예제에서는 형식을 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();
}