CA1034: Vnořené typy by neměly být viditelné

Vlastnost Hodnota
ID pravidla CA1034
Název Vnořené typy by neměly být viditelné
Kategorie Návrh
Oprava způsobující chybu nebo chybu způsobující chybu Narušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Externě viditelný typ obsahuje deklaraci externě viditelného typu. Vnořené výčty, chráněné typy a vzory tvůrce jsou z tohoto pravidla vyloučeny.

Popis pravidla

Vnořený typ je typ deklarovaný v rámci oboru jiného typu. Vnořené typy jsou užitečné pro zapouzdření podrobností privátní implementace obsahujícího typu. Jsou-li vnořené typy používány za tímto účelem, neměly by být externě viditelné.

Nepoužívejte externě viditelné vnořené typy pro logické seskupení nebo nepoužívejte kolize názvů; místo toho použijte obory názvů.

Vnořené typy zahrnují pojem přístupnosti členů, kterému někteří programátoři nerozumí jasně.

Chráněné typy je možné použít v podtřídách a vnořených typech v pokročilých scénářích přizpůsobení.

Jak opravit porušení

Pokud nechcete, aby byl vnořený typ externě viditelný, změňte přístupnost typu. Jinak odeberte vnořený typ z nadřazeného objektu. Pokud je účelem vnoření kategorizovat vnořený typ, použijte místo toho obor názvů k vytvoření hierarchie.

Kdy potlačit upozornění

Nepotlačujte upozornění na toto pravidlo.

Příklad

Následující příklad ukazuje typ, který porušuje pravidlo.

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