CA1852:密封内部类型

属性
规则 ID CA1852
标题 密封内部类型
类别 “性能”
修复是中断修复还是非中断修复 非中断
引入的版本 .NET 7
在 .NET 9 中默认启用

原因

在其程序集外部不可访问且其包含程序集中没有子类型的类型不会标记为 sealed(在 Visual Basic 中标记为NotInheritable)。

规则说明

当某类型在其程序集外部不可访问且其包含程序集中没有子类型时,可以安全地密封该类型。 密封类型可以提高性能。 有关详细信息,请参阅 分析器建议:密封内部/专用类型]。

如果将 System.Runtime.CompilerServices.InternalsVisibleToAttribute 应用于正在分析的程序集,那么此规则不会标记默认标记为 sealed 的类型,因为友元程序集可能会使用字段。 若要分析程序集,请参阅配置要分析的代码

如何解决冲突

将类型标记为 sealed(在 Visual Basic 中标记为 NotInheritable)。

示例

以下代码片段演示了 CA1852 冲突:

internal class C
{ }
Class C
End Class

以下代码片段修复了冲突:

internal sealed class C
{ }
NotInheritable Class C
End Class

何时禁止显示警告

如果不考虑性能,则可以安全地禁止显示警告。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

#pragma warning disable CA1852
// The code that's violating the rule is on this line.
#pragma warning restore CA1852

若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none

[*.{cs,vb}]
dotnet_diagnostic.CA1852.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告

配置代码以进行分析

使用下面的选项来配置代码库的哪些部分要运行此规则。

可以仅为此规则、为适用的所有规则或为适用的此类别(性能)中的所有规则配置此选项。 有关详细信息,请参阅代码质量规则配置选项

忽略 InternalsVisibleTo 特性

默认情况下,如果所分析的程序集使用 InternalsVisibleToAttribute 公开其内部符号,则禁用此规则。 若要指定即使程序集被标记为 InternalsVisibleToAttribute 也应运行该规则,请将以下键值对添加到项目的 .editorconfig 文件中:

dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true

此选项从 .NET 8 开始可用。