CA1034: os tipos aninhados não devem ser visíveis
TypeName |
NestedTypesShouldNotBeVisible |
CheckId |
CA1034 |
Categoria |
Microsoft.Design |
Alteração Significativa |
Quebra |
Causa
Um tipo externamente visível contém uma declaração de tipo externamente visível.As enumerações aninhadas e os tipos protegidos são isentos desta regra.
Descrição da Regra
Um tipo aninhado é um tipo declarado no escopo de outro tipo.Os tipos aninhados são úteis para encapsular detalhes de implementação privados do tipo contentor.Usados para essa finalidade, os tipos aninhados não devem ser externamente visíveis.
Não use tipos aninhados externamente visíveis para o agrupamento lógico ou não para evitar colisões de nome; em vez disso, use namespaces.
Os tipos aninhados incluem a noção de acessibilidade do membro, que alguns programadores não entendem claramente.
Os tipos protegidos podem ser usados nas subclasses e aninhados em cenários de personalização dos tipos com antecedência.
Como Corrigir Violações
Se você não pretende o tipo ser aninhado externamente visível, altere a acessibilidade do tipo.Se não, remova o tipo aninhado de seu pai.Se a finalidade de aninhamento é categorizar o tipo aninhado, use um namespace para criar em vez da hierarquia.
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo
O exemplo a seguir mostra um tipo que viola a regra.
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();
}
};
}