Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 vnější typ je třída, rozhraní nebo struktura, vnořené typy jsou výchozí pro privátní; jsou přístupné pouze z jejich typu. V předchozím příkladu je třída Nested 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é.
Při definování
protected,protected internalnebo vnořenéprivate protectedtřídy uvnitř uzavřené třídy se generuje upozornění kompilátoru CS0628, "nový chráněný člen deklarovaný v uzavřené 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 třídu Nested:
public class Container
{
public class Nested
{
Nested() { }
}
}
Vnořený nebo vnitřní typ může přistupovat k obsahujícímu, tedy vnějšímu typu. Chcete-li získat přístup k obsahujícímu typu, předejte ho jako argument do konstruktoru vnořeného typu. Napří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 typu, který je obsahuje, včetně všech zděděných chráněných členů.
V předchozí deklaraci je úplný název třídy NestedContainer.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();