滅入るんるん

何か書きます

Kotlin使いのためのC#入門 Nested Classes

> Top

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のように匿名クラスが必要になること自体が少ないです。