Vnořené typy (Průvodce programováním v C#)
Typ definovaný v rámci třídy, struktury nebo rozhraní se nazývá vnořený typ. Například
public class Container
{
class Nested
{
Nested() { }
}
}
Bez ohledu na to, zda je vnější typ třída, rozhraní nebo struktura, jsou vnořené typy standardně soukromé; jsou přístupné pouze z typu obsahujícího. V předchozím příkladu Nested
je třída nepřístupná pro externí typy.
Můžete také zadat modifikátor přístupu pro definování přístupnosti vnořeného typu následujícím způsobem:
Vnořené typy třídy můžou být veřejné, chráněné, interní, chráněné interní, soukromé nebo soukromé.
Definováním
protected
protected internal
nebo vnořenéprivate protected
třídy uvnitř zapečetěné třídy však generuje upozornění kompilátoru CS0628, "nový chráněný člen deklarovaný v zapečetěné třídě".Mějte také na paměti, že externí viditelnost vnořeného typu porušuje pravidlo kvality kódu CA1034 "Vnořené typy by neměly být viditelné".
Vnořené typy struktury můžou být veřejné, interní nebo soukromé.
Následující příklad zpřístupňuje Nested
třídu jako veřejnou:
public class Container
{
public class Nested
{
Nested() { }
}
}
Vnořený nebo vnitřní typ má přístup k typu obsahující nebo vnější. Pokud chcete získat přístup k typu obsahujícího, předejte ho jako argument konstruktoru vnořeného typu. Příklad:
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
Vnořený typ má přístup ke všem členům, které jsou přístupné pro daný typ. Má přístup k soukromým a chráněným členům obsahujícího typu, včetně všech zděděných chráněných členů.
V předchozí deklaraci je Container.Nested
úplný název třídy Nested
. Toto je název použitý k vytvoření nové instance vnořené třídy následujícím způsobem:
Container.Nested nest = new Container.Nested();