CA1047:不要在密封类型中声明受保护的成员

类型名

DoNotDeclareProtectedMembersInSealedTypes

CheckId

CA1047

类别

Microsoft.Design

是否重大更改

非重大更改

原因

公共类型为 sealed(在 Visual Basic 中为 NotInheritable),并且声明了受保护的成员或受保护的嵌套类型。 该规则不报告 Finalize 方法的冲突,该方法必须遵循此模式。

规则说明

类型声明受保护的成员,使继承类型可以访问或重写该成员。 按照定义,不能从密封类型继承,意味着不能调用密封类型上受保护的方法。

C# 编译器为此错误发出警告。

如何解决冲突

要修复与该规则的冲突,请将成员的访问级别改为私有,或使类型可继承。

何时禁止显示警告

不要禁止显示此规则发出的警告。 使类型保持当前状态可能引发维护问题,不会带来任何好处。

示例

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

Imports System

Namespace DesignLibrary

   Public NotInheritable Class BadSealedType
      Protected  Sub MyMethod
      End Sub
   End Class

End Namespace
using System;

namespace DesignLibrary
{
   public sealed class SealedClass
   {
      protected void ProtectedMethod(){}
   }
}