CA1034: Zagnieżdżone typy nie powinny być widoczne

Właściwości Wartość
Identyfikator reguły CA1034
Stanowisko Typy zagnieżdżone nie powinny być widoczne
Kategoria Projekt
Poprawka powodująca niezgodność lub niezgodność Kluczowa
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Typ widoczny zewnętrznie zawiera zewnętrznie widoczną deklarację typu. Zagnieżdżone wyliczenia, typy chronione i wzorce konstruktora są wykluczone z tej reguły.

Opis reguły

Typ zagnieżdżony jest typem zadeklarowanym w zakresie innego typu. Typy zagnieżdżone są przydatne do hermetyzacji prywatnych szczegółów implementacji zawierającego typ. Używane w tym celu typy zagnieżdżone nie powinny być widoczne na zewnątrz.

Nie należy używać typów zagnieżdżonych zewnętrznie do grupowania logicznego ani unikać kolizji nazw; Zamiast tego należy używać przestrzeni nazw.

Typy zagnieżdżone obejmują pojęcie ułatwień dostępu składowych, które niektórzy programiści nie rozumieją wyraźnie.

Typy chronione mogą być używane w podklasach i typach zagnieżdżonych w scenariuszach dostosowywania z wyprzedzeniem.

Jak naprawić naruszenia

Jeśli nie zamierzasz, aby typ zagnieżdżony był widoczny zewnętrznie, zmień dostępność typu. W przeciwnym razie usuń typ zagnieżdżony z elementu nadrzędnego. Jeśli celem zagnieżdżania jest kategoryzowanie typu zagnieżdżonego, użyj przestrzeni nazw, aby utworzyć hierarchię.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.

Przykład

W poniższym przykładzie pokazano typ, który narusza regułę.

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