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
protected
ofprivate 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.Nested
de 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();