Teilen ü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 oder führt nicht zur Unterbrechung Breaking
Standardmäßig in .NET 8 aktiviert Nein

Ursache

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

Regelbeschreibung

Ein geschachtelter Typ ist ein Typ, der innerhalb des Gültigkeitsbereichs eines anderen Typs deklariert ist. Geschachtelte Typen eignen sich für die Kapselung privater Implementierungsdetails der enthaltenden Typen. 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 Memberzugriffs, das für einige Programmierer nicht ganz verständlich ist.

Geschützte Typen können in Unterklassen und geschachtelte Typen in fortschrittlichen Anpassungsszenarien verwendet werden.

Behandeln von Verstößen

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, können Sie stattdessen eine Namespace zur Erstellung der Hierarchie verwenden.

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