Share via


Geschachtelte Typen sollten nicht sichtbar sein

Aktualisiert: November 2007

     TypeName

NestedTypesShouldNotBeVisible

CheckId

CA1034

Kategorie

Microsoft.Design

Unterbrechende Änderung

Breaking

Ursache

Extern sichtbare Typen enthalten extern sichtbare Typdeklarationen. Geschachtelte Enumeratoren und geschützte Typen sind von dieser Regel befreit.

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.

Extern sichtbare geschachtelte Typen dürfen nicht für logische Gruppierungen oder zur Vermeidung von Namenskonflikten verwendet werden. Stattdessen sollten Namespaces verwendet werden.

Geschachtelte Typen basieren auf dem Memberzugriff, was von einigen Programmierern nicht verstanden wird.

Geschützte Typen können in Unterklassen und geschachtelten Typen für die weitere Anpassung verwendet werden.

Behandlung von Verstößen

Wenn Sie nicht beabsichtigen, dass der geschachtelte Typ extern sichtbar sein soll, ändern Sie das Zugriffsverfahren für den Typ. Andernfalls entfernen Sie den geschachtelten Typ aus seinem übergeordneten Element. Falls beabsichtigt war, durch die Schachtelung die Kategorisierung des geschachtelten Typs zu bewirken, erstellen Sie die Hierarchie mithilfe eines Namespaces.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.

Beispiel

Im folgenden Beispiel wird ein Typ veranschaulicht, der gegen die Regel verstößt.

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