CA1052:靜態預留位置型別應該為密封的
型別名稱 |
StaticHolderTypesShouldBeSealed |
CheckId |
CA1052 |
分類 |
Microsoft.Design |
中斷變更 |
中斷 |
原因
公用或保護的型別只包含靜態 (Static) 成員,因此不會利用 sealed (C# 參考) (NotInheritable (Visual Basic)) 修飾詞 (Modifier) 宣告它們。
規則描述
這項規則會假設只包含靜態成員的型別不是設計為繼承的,因為該型別不會提供可以在衍生型別 (Derived Type) 中加以覆寫的任何功能。 預定不會繼承的型別應該以 sealed 修飾詞標記,以允許使用它做為基底型別 (Base Type)。
如何修正違規
若要修正此規則的違規情形,請將型別標示為 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 修飾詞進行修正
描述
下列範例顯示如何藉由使用 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();
}