CA1034: Los tipos anidados no deben ser visibles

Propiedad Value
Identificador de la regla CA1034
Título Los tipos anidados no deben ser visibles
Categoría Diseño
La corrección es problemática o no problemática Problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Un tipo visible externamente contiene una declaración de tipos visible externamente. Las enumeraciones anidadas, los tipos protegidos y los patrones de generador están exentos de esta regla.

Descripción de la regla

Los tipos anidados son tipos declarados en el ámbito de otro tipo. Los tipos anidados son útiles para encapsular los detalles de la implementación privada del tipo contenido. Los tipos anidados, utilizados para este propósito, no deben ser visibles externamente.

No utilice tipos anidados visibles externamente para la agrupación lógica o para evitar colisiones de nombres; en su lugar, use espacios de nombres.

Los tipos anidados incluyen la noción de accesibilidad de miembros, que algunos programadores no entienden claramente.

Los tipos protegidos se pueden utilizar en subclases y tipos anidados en escenarios de personalización avanzada.

Cómo corregir infracciones

Si no quiere que el tipo anidado sea visible externamente, cambie la accesibilidad del tipo. De lo contrario, quite el tipo anidado de su elemento primario. Si el propósito de la anidación es categorizar el tipo anidado, use un espacio de nombres para crear la jerarquía.

Cuándo suprimir las advertencias

No suprima las advertencias de esta regla.

Ejemplo

En el ejemplo siguiente se muestra un tipo que infringe la regla.

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