Udostępnij za pośrednictwem


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

TypeName

NestedTypesShouldNotBeVisible

CheckId

CA1034

Kategoria

Microsoft.Design

Złamanie zmiany

Złamanie

Przyczyna

Typ widocznych zewnętrznie zawiera deklarację typu widoczne z zewnątrz.Wyliczeń zagnieżdżonych i typów chronionych są zwolnione od tej reguły.

Opis reguły

Zagnieżdżony typ to typ zadeklarowany w zakres innego typu.Zagnieżdżone typy są przydatne do enkapsulacji szczegóły implementacji prywatne zawierające typu.Stosowane w tym celu, zagnieżdżonych typów nie powinny być widoczne z zewnątrz.

Nie należy używać widoczne z zewnątrz zagnieżdżonych typów do logicznego grupowania lub w celu uniknięcia konfliktów nazw; Zamiast tego należy użyć przestrzeni nazw.

Zagnieżdżone typy pojęcie Członkowskie ułatwień dostępu, które Niektórzy programiści nie rozumieją, wyraźnie.

Typy chronionych może być używane w podklasy i zagnieżdżonych typów w scenariuszach dostosowywania zaliczki.

Jak naprawić naruszenia

Jeśli nie zamierzasz typu zagnieżdżonego być widoczne z zewnątrz, należy zmienić typ ułatwień dostępu.W przeciwnym wypadku usuń typu zagnieżdżonego ze swojej witryny nadrzędnej.Jeśli celem zagnieżdżanie jest kategoryzowania typu zagnieżdżonego, należy korzystać z obszaru nazw, zamiast tego utworzyć hierarchię.

Kiedy do pomijania ostrzeżenia

Nie pomijaj ostrzeżenie od tej reguły.

Przykład

Poniższy przykład pokazuje typ, który narusza reguły.

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