共用方式為


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

相關規則

CA1053:靜態預留位置型別不應包含建構函式