CA1047:不要在密封类型中声明受保护的成员
属性 | 值 |
---|---|
规则 ID | CA1047 |
标题 | 不要在密封类型中声明受保护的成员 |
类别 | 设计 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 作为建议 |
原因
公共类型是 sealed
(在 Visual basic 中为 NotInheritable
),并声明了一个受保护的成员或受保护的嵌套类型。 此规则不报告 Finalize 方法的冲突,这些方法必须遵循此模式。
规则说明
类型声明受保护的成员,使继承类型可以访问或重写该成员。 按照定义,不能从密封类型继承,这表示不能调用密封类型上的受保护方法。
对于这种情况,C# 编译器发出警告 CS0628 而不是 CA1047。
如何解决冲突
若要解决此规则的冲突,请将成员的访问级别更改为专用,或使该类型可继承。
何时禁止显示警告
不禁止显示此规则发出的警告。 使类型保持当前状态可能会导致维护问题,而且不会带来任何好处。
配置代码以进行分析
使用下面的选项来配置代码库的哪些部分要运行此规则。
可以仅为此规则、为适用的所有规则或为适用的此类别(设计)中的所有规则配置此选项。 有关详细信息,请参阅代码质量规则配置选项。
包含特定的 API 图面
你可以根据代码库的可访问性,配置要针对其运行此规则的部分。 例如,若要指定规则应仅针对非公共 API 图面运行,请将以下键值对添加到项目中的 .editorconfig 文件:
dotnet_code_quality.CAXXXX.api_surface = private, internal
示例
下面的示例演示了与此规则发生冲突的类型。
public sealed class SealedClass
{
protected void ProtectedMethod(){}
}
Public NotInheritable Class BadSealedType
Protected Sub MyMethod
End Sub
End Class