CA1034:嵌套类型不应是可见的

属性
规则 ID CA1034
标题 嵌套类型不应是可见的
类别 设计
修复是中断修复还是非中断修复 重大
在 .NET 8 中默认启用

原因

外部可见类型包含外部可见类型声明。 嵌套列举、受保护类型和生成器模式不受此规则的限制。

规则说明

嵌套类型是在另一个类型的范围中声明的类型。 嵌套类型用于封装包含类型的私有实现详细信息。 如果用于此用途,则嵌套类型不应是外部可见的。

不要使用外部可见嵌套类型进行逻辑分组或避免名称冲突;请改为使用命名空间。

嵌套类型包括成员可访问性的概念,对此一些程序员并不清楚了解。

在高级自定义场景中,受保护的类型可用于子类和嵌套类型。

如何解决冲突

如果不打算让嵌套类型在外部可见,请更改该类型的可访问性。 否则,请从其父级中删除嵌套类型。 如果嵌套的目的是对嵌套类型进行分类,请改为使用命名空间来创建层次结构。

何时禁止显示警告

不禁止显示此规则发出的警告。

示例

下面的示例演示了与规则冲突的类型。

public class ParentType
{
    public class NestedType
    {
        public NestedType()
        {
        }
    }

    public ParentType()
    {
        NestedType nt = new NestedType();
    }
}
Imports System

Namespace ca1034

    Class ParentType

        Public Class NestedType
            Sub New()
            End Sub
        End Class

        Sub New()
        End Sub

    End Class

End Namespace