CA1034: I tipi annidati non devono essere visibili

Proprietà valore
ID regola CA1034
Titolo I tipi annidati non devono essere visibili
Categoria Progettazione
Correzione che causa un'interruzione o un'interruzione Interruzione
Abilitato per impostazione predefinita in .NET 8 No

Causa

Un tipo visibile esternamente contiene una dichiarazione di tipo visibile esternamente. Le enumerazioni annidate, i tipi protetti e i modelli di generatore sono esentati da questa regola.

Descrizione regola

Un tipo annidato è un tipo dichiarato nell'ambito di un altro tipo. I tipi annidati sono utili per incapsulare i dettagli dell'implementazione privata del tipo contenitore. I tipi annidati utilizzati per questo scopo non devono essere visibili esternamente.

Non usare tipi annidati esternamente visibili per il raggruppamento logico o per evitare conflitti di nomi; Usare invece spazi dei nomi.

I tipi annidati includono la nozione di accessibilità dei membri, che alcuni programmatori non capiscono chiaramente.

I tipi protetti possono essere usati in sottoclassi e tipi annidati in scenari di personalizzazione avanzati.

Come correggere le violazioni

Se non si intende che il tipo annidato sia visibile esternamente, modificare l'accessibilità del tipo. In caso contrario, rimuovere il tipo annidato dal relativo elemento padre. Se lo scopo dell'annidamento consiste nel classificare il tipo annidato, usare uno spazio dei nomi per creare invece la gerarchia.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.

Esempio

Nell'esempio seguente viene illustrato un tipo che viola la regola.

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