Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA1034 |
| Título | Los tipos anidados no deben ser visibles |
| Categoría | Diseño |
| La corrección interrumpe o no interrumpe | Ruptura |
| Habilitado de forma predeterminada en .NET 10 | No |
| Idiomas aplicables | C# y Visual Basic |
Causa
Un tipo visible externamente contiene una declaración de tipo visible externamente. Las enumeraciones anidadas, los tipos protegidos y los patrones de creación están exentos de esta regla.
Descripción de la regla
Un tipo anidado es un tipo declarado 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 los miembros, algo 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, utilice un espacio de nombres para establecer 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