Share via


CA1052:应密封静态容器类型

类型名

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:静态容器类型不应具有构造函数