Compartilhar via


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();
        }
    };
}