Compartir a través de


Los tipos anidados no deben ser visibles

Actualización: noviembre 2007

Nombre de tipo

NestedTypesShouldNotBeVisible

Identificador de comprobación

CA1034

Categoría

Microsoft.Design

Cambio problemático

Motivo

Un tipo visible externamente contiene una declaración de tipos visible externamente. Los enumeradores anidados y los tipos protegidos están exentos de esta regla.

Descripción de la regla

Los tipos anidados son tipos declarados dentro del á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 agrupar de forma lógica o evitar las colisiones del nombre; en su lugar, utilice los espacios de nombres.

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

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

Cómo corregir infracciones

Si no desea que el tipo anidado esté visible externamente, cambie la accesibilidad del tipo. De lo contrario, quite el tipo anidado de su elemento primario. Si el propósito del anidamiento es clasificar el tipo anidado, utilice un espacio de nombres para crear la jerarquía en su lugar.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo

El siguiente ejemplo muestra un tipo que infringe la regla.

Imports System

Namespace DesignLibrary

    Class ParentType

        Public Class NestedType
            Sub New()
            End Sub
        End Class

        Sub New()
        End Sub

    End Class

End Namespace
using System;

namespace DesignLibrary
{
    internal class ParentType
    {
        public class NestedType
        {
            public NestedType()
            {
            }
        }

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

namespace DesignLibrary
{
    public ref class ParentType
    {
    public:
        ref class NestedType
        {
        public:
            NestedType()
            {
            }
        };

        ParentType()
        {
            NestedType^ nt = gcnew NestedType();
        }
    };
}