Beágyazott típusok (C# programozási útmutató)
Az osztályon, szerkezeten vagy interfészen belül definiált típusokat beágyazott típusnak nevezzük. Példa:
public class Container
{
class Nested
{
Nested() { }
}
}
Függetlenül attól, hogy a külső típus egy osztály, interfész vagy struktúra, a beágyazott típusok alapértelmezés szerint privátak, és csak a bennük található típusból érhetők el. Az előző példában az Nested
osztály nem érhető el külső típusok számára.
A beágyazott típus akadálymentességének meghatározásához megadhat egy hozzáférési módosítót is, az alábbiak szerint:
Az osztály beágyazott típusai lehetnek nyilvános, védett, belső, védett belső, privát vagy privát védelem.
Ha azonban egy lezárt osztályon belül definiál egy
protected
,protected internal
vagyprivate protected
beágyazott osztályt, az "új védett tag deklarált lezárt osztályban" CS0628 fordítói figyelmeztetést generál.Vegye figyelembe azt is, hogy a beágyazott típus külső láthatóvá tétele sérti a CA1034 kódminőségi szabályt,"A beágyazott típusok nem lehetnek láthatók".
A strukturált szerkezetek beágyazott típusai lehetnek nyilvánosak, belsők vagy privátak.
Az alábbi példa nyilvánossá teszi az osztályt Nested
:
public class Container
{
public class Nested
{
Nested() { }
}
}
A beágyazott vagy belső típus hozzáférhet a benne lévő vagy külső típushoz. A kódoló típus eléréséhez adja át argumentumként a beágyazott típus konstruktorának. Példa:
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
A beágyazott típus hozzáféréssel rendelkezik az összes olyan taghoz, amely elérhető a benne található típushoz. Hozzáférhet az adott típusú magán- és védett tagokhoz, beleértve az örökölt védett tagokat is.
Az előző deklarációban az osztály Nested
teljes neve .Container.Nested
Ez a név a beágyazott osztály új példányának létrehozásához használatos, az alábbiak szerint:
Container.Nested nest = new Container.Nested();