C#においてもクラスなどは他のクラスや構造体などのなかでもネスト宣言することができます。
class OuterClass { private int a; class InnerClass { private int b; public InnerClass(OuterClass outerClass) { // OuterClassのインスタンスからaはアクセスできる int i = outerClass.a; // コンパイルエラー: InnerClassのメンバーにOuterClassのメンバーは含まれない int a = a; } } public void Main() { // コンパイルエラー: ここでInnerClass.bは参照できない new InnerClass(this).b; } }
Inner Classes
先ほどの例でわかりますが、C#にはKotlinのinner classがありません。ただし、入れ子にされたクラスに外側のインスタンスを与えれば、private修飾子がついていてもアクセスできます。
Javaで言うならばnested static classに近い存在かもしれませんね。
Anonymous inner classes
C#には該当する匿名クラスと同等な機能はありません。 フレームワーク設計的にラムダやデリゲートを用いることが多いので、JavaやKotlinのように匿名クラスが必要になること自体が少ないです。