Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
En kapslad typ är en typ som du definierar i en klass, en struct eller ett gränssnitt. 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. Du kan bara komma åt dem från deras innehållande typ. I föregående exempel kan externa typer inte komma åt Nested klassen.
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 om du definierar en
protected,protected internal, ellerprivate protectedkapslad klass i en förseglad klass genereras kompilatorvarningen 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 medlemsvariabler 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 det fullständiga namnet på klassen NestedContainer.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();