クラス、構造体、またはインターフェイス内で定義された型は、入れ子になった型と呼ばれます。 次に例を示します。
public class Container
{
class Nested
{
Nested() { }
}
}
外側の型がクラス、インターフェイス、構造体のいずれであるかに関係なく、入れ子になった型は既定で private になります。これらは、その包含型からのみアクセスできます。 前の例では、Nested
クラスは外部型にアクセスできません。
次のように、入れ子になった型のアクセシビリティを定義する アクセス修飾子 を指定することもできます。
クラスの入れ子になった型は、パブリック、保護、内部、保護された内部、プライベート、またはプライベートで保護できます。
ただし、シール クラス内に
protected
、protected internal
、または入れ子になったクラスprivate protected
を定義すると、コンパイラ警告 CS0628 "sealed クラスで宣言された新しい保護されたメンバー" が生成されます。また、入れ子になった型を外部から表示すると、コード品質規則 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