CA1052:应密封静态容器类型

类型名

StaticHolderTypesShouldBeSealed

CheckId

CA1052

类别

Microsoft.Design

是否重大更改

原因

某公共或受保护类型仅包含静态成员,而且没有用 sealed(C# 参考) (NotInheritable (Visual Basic)) 修饰符声明。

规则说明

该规则假定只包含静态成员的类型没有设计为能被继承,因为该类型不提供可以在派生类型中重写的任何功能。 不希望被继承的类型应使用 sealed 修饰符禁止将其用作基类型。

如何解决冲突

要修复与该规则的冲突,请将该类型标记为 sealed。 如果针对的是 .NET Framework 2.0 或更早版本,一个更好的方法是将该类型标记为 static。 在这种方法中,不必声明一个私有构造函数来防止创建类。

何时禁止显示警告

只有当该类型旨在被继承时,才能禁止显示与该规则有关的警告。 没有 sealed 修饰符意味着该类型可以用作基类型。

冲突的示例

ms182168.collapse_all(zh-cn,VS.110).gif说明

下面的示例演示一个与该规则冲突的类型。

ms182168.collapse_all(zh-cn,VS.110).gif代码

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 修饰符进行修复

ms182168.collapse_all(zh-cn,VS.110).gif说明

下面的示例演示如何通过使用 static 修饰符标记类型来修复此规则的冲突。

ms182168.collapse_all(zh-cn,VS.110).gif代码

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