入れ子になった型は、 クラス、 構造体、またはインターフェイス内で定義する型 です。 例えば次が挙げられます。
public class Container
{
class Nested
{
Nested() { }
}
}
外側の型がクラス、インターフェイス、構造体のいずれであるかに関係なく、入れ子になった型は既定で private になります。 それらにアクセスできるのは、その包含型からのみです。 前の例では、外部型は Nested クラスにアクセスできません。
次のように、入れ子になった型のアクセシビリティを定義する アクセス修飾子 を指定することもできます。
クラスの入れ子になった型は、パブリック、プロテクト、インターナル、プロテクト インターナル、プライベート、またはプライベート プロテクト。
ただし、
protectedの中にprotected internal、private protected、または のような入れ子になったクラスを定義すると、「protectedで宣言された新しい protected メンバー」というコンパイラ警告 CS0628 が生成されます。また、入れ子になった型を外部から表示すると、コード品質規則 CA1034 "入れ子になった型は表示できません" に違反することにも注意してください。
次の例では、Nested クラスをパブリックにします。
public class Container
{
public class Nested
{
Nested() { }
}
}
入れ子になった型または内部型は、包含型または外側型にアクセスできます。 包含型にアクセスするには、入れ子になった型のコンストラクターに引数として渡します。 例えば次が挙げられます。
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
入れ子になった型は、その包含型からアクセスできるすべてのメンバーにアクセスできます。 入れ子にされた型は、継承されたプロテクト メンバーを含む、包含する型のプライベート メンバーとプロテクト メンバーにアクセスできます。
前の宣言では、クラス Nested の完全な名前が Container.Nested。 これは、次のように、入れ子になったクラスの新しいインスタンスを作成するために使用される名前です。
Container.Nested nest = new Container.Nested();
こちらも参照ください
.NET