Share via


Geneste typen (C#-programmeerhandleiding)

Een type dat in een klasse, struct of interface is gedefinieerd, wordt een genest type genoemd. Bijvoorbeeld

public class Container
{
    class Nested
    {
        Nested() { }
    }
}

Ongeacht of het buitenste type een klasse, interface of struct is, zijn geneste typen standaard privé. Ze zijn alleen toegankelijk vanuit hun type. In het vorige voorbeeld is de Nested klasse niet toegankelijk voor externe typen.

U kunt ook een toegangsaanpassing opgeven om de toegankelijkheid van een genest type te definiëren, als volgt:

  • Geneste typen van een klasse kunnen openbaar, beveiligd, intern, beveiligd intern, privé of privé zijn.

    Als u echter een protectedof private protected geneste klasse in een verzegelde klasse definieert, protected internal genereert de compilerwaarschuwing CS0628, 'nieuw beveiligd lid dat is gedeclareerd in verzegelde klasse'.

    Houd er ook rekening mee dat het extern zichtbaar maken van een genest type de CA1034-codekwaliteitsregel CA1034 "Geneste typen mogen niet zichtbaar zijn".

  • Geneste typen van een struct kunnen openbaar, intern of privé zijn.

In het volgende voorbeeld wordt de Nested klasse openbaar:

public class Container
{
    public class Nested
    {
        Nested() { }
    }
}

Het geneste of binnenste type heeft toegang tot het type met of buitenste. Als u toegang wilt krijgen tot het type met de inhoud, geeft u het als argument door aan de constructor van het geneste type. Voorbeeld:

public class Container
{
    public class Nested
    {
        private Container? parent;

        public Nested()
        {
        }
        public Nested(Container parent)
        {
            this.parent = parent;
        }
    }
}

Een genest type heeft toegang tot alle leden die toegankelijk zijn voor het bijbehorende type. Het heeft toegang tot privé- en beveiligde leden van het type met inbegrip van overgenomen beveiligde leden.

In de vorige verklaring is Container.Nestedde volledige naam van de klasseNested. Dit is de naam die wordt gebruikt om een nieuw exemplaar van de geneste klasse te maken, als volgt:

Container.Nested nest = new Container.Nested();

Zie ook