次の方法で共有


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 修飾子による修正

説明

型を 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: スタティック ホルダー型にはコンストラクターを含めません