Freigeben über


CA1034: Geschachtelte Typen sollten nicht sichtbar sein.

Eigenschaft Wert
Regel-ID CA1034
Titel Geschachtelte Typen sollten nicht sichtbar sein.
Kategorie Design
Fix führt zu Unterbrechungen oder bleibt funktionsfähig Eilmeldung
Standardmäßig in .NET 10 aktiviert Nein
Anwendbare Sprachen C# und Visual Basic

Ursache

Ein extern sichtbarer Typ enthält eine extern sichtbare Typdeklaration. Verschachtelte Enumerationen, geschützte Typen und Builder-Muster sind von dieser Regel ausgenommen.

Regelbeschreibung

Ein geschachtelter Typ ist ein Typ, der innerhalb des Gültigkeitsbereichs eines anderen Typs deklariert ist. Verschachtelte Typen eignen sich zum Kapseln privater Implementierungsdetails des enthaltenden Typs. Bei dieser Verwendungsart sollten geschachtelte Typen nicht extern sichtbar sein.

Verwenden Sie keine extern sichtbaren geschachtelten Typen zur logischen Gruppierung oder zur Vermeidung von Namenskonflikten. Verwenden Sie stattdessen Namespaces.

Geschachtelte Typen beinhalten das Konzept des Zugriffs auf Mitglieder, das für einige Programmierer nicht vollständig verständlich ist.

Geschützte Typen können in Unterklassen und verschachtelten Typen in fortgeschrittenen Anpassungsszenarien verwendet werden.

So beheben Sie Verstöße

Wenn Sie nicht wollen, dass der geschachtelte Typ extern sichtbar ist, müssen Sie den Zugriff auf den Typ ändern. Andernfalls können Sie den geschachtelten Typ aus dem übergeordneten Element entfernen. Wenn der Zweck der Schachtelung darin besteht, den geschachtelten Typ zu kategorisieren, verwenden Sie stattdessen Namespace zur Erstellung der Hierarchie.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Das folgende Beispiel zeigt einen Typ, der gegen die Regel verstößt.

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