CA1034: Tipos aninhados não deverá ser visíveis
TypeName |
NestedTypesShouldNotBeVisible |
CheckId |
CA1034 |
<strong>Categoria</strong> |
Microsoft.design |
Alteração significativa |
Quebrando |
Causa
Um tipo visível externamente contém uma declaração de tipo visível externamente. Enumerações aninhadas e tipos protegidos são isentos desta regra.
Descrição da regra
Um tipo aninhado é um tipo declarado dentro do escopo de outro tipo. Tipos aninhados são úteis para encapsular os detalhes de implementação privada do tipo recipiente. Usado para essa finalidade, tipos aninhados não devem ser visíveis externamente.
Não use visíveis externamente tipos aninhados para agrupamento lógico, ou para evitar colisões de nome; em vez disso, use espaços para nome.
Tipos aninhados incluem a noção de acessibilidade do membro, o que alguns programadores não compreender claramente.
Tipos protegidos podem ser usados em subclasses e tipos aninhados em cenários de personalização avançada.
Como corrigir violações
Se você não pretende que o tipo aninhado seja visível externamente, altere a acessibilidade do tipo. Caso contrário, remova o tipo aninhado de seu pai. Se a finalidade o aninhamento é categorizar o tipo aninhado, use um namespace para criar a hierarquia em vez disso.
Quando suprimir avisos
Não suprimir um aviso da 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();
}
};
}