Compartilhar via


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 estã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 particular do tipo de recipiente.Usado para essa finalidade, tipos aninhados não devem ser visíveis externamente.

Não use tipos aninhados externamente visíveis para o agrupamento lógico ou para evitar conflitos de nomes; em vez disso, use espaços para nome.

Tipos aninhados incluem a noção de acessibilidade de membro, que alguns programadores não entendem 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 espaço para nome 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();
        }
    };
}