Kapslade typer (programmeringsguide för C#)
En typ som definierats i en klass, en struct eller ett gränssnitt kallas för en kapslad typ. Till exempel
public class Container
{
class Nested
{
Nested() { }
}
}
Oavsett om den yttre typen är en klass, ett gränssnitt eller en struct, är kapslade typer som standard privata. De är endast tillgängliga från deras innehållande typ. I föregående exempel Nested
är klassen otillgänglig för externa typer.
Du kan också ange en åtkomstmodifierare för att definiera tillgängligheten för en kapslad typ enligt följande:
Kapslade typer av en klass kan vara offentliga, skyddade, interna, skyddade interna, privata eller privata.
Men att definiera en
protected
,protected internal
ellerprivate protected
kapslad klass i en förseglad klass genererar kompilatorvarning CS0628, "ny skyddad medlem deklarerad i förseglad klass".Tänk också på att göra en kapslad typ externt synlig bryter mot kodkvalitetsregeln CA1034 "Kapslade typer bör inte vara synliga".
Kapslade typer av en struct kan vara offentliga, interna eller privata.
I följande exempel blir Nested
klassen offentlig:
public class Container
{
public class Nested
{
Nested() { }
}
}
Den kapslade eller inre typen kan komma åt den innehållande, eller yttre, typen. Om du vill komma åt den innehållande typen skickar du den som ett argument till konstruktorn av den kapslade typen. Till exempel:
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
En kapslad typ har åtkomst till alla medlemmar som är tillgängliga för dess innehållande typ. Den kan komma åt privata och skyddade medlemmar av den innehållande typen, inklusive ärvda skyddade medlemmar.
I föregående deklaration är Container.Nested
det fullständiga namnet på klassen Nested
. Det här är namnet som används för att skapa en ny instans av den kapslade klassen enligt följande:
Container.Nested nest = new Container.Nested();