CA1034: Geschachtelte Typen sollten nicht sichtbar sein
TypeName |
NestedTypesShouldNotBeVisible |
CheckId |
CA1034 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Extern sichtbare Typen enthalten extern sichtbare Typdeklarationen. Geschachtelte Enumerationen 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.
Behandeln 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();
}
};
}