10

いくつかの内部変数を持つクラス C があります。C の変数にアクセスするネストされたクラス N があります。C にはいくつかの静的メソッドと変数がありますが、C も N も静的ではありません。NI から C の非静的変数にアクセスしようとすると、波線の下線が表示され、「静的コンテキストで非静的フィールド [フィールド名] にアクセスできません」というメッセージが表示されます。

囲んでいるクラス自体から変数に問題なくアクセスできるため、これはネストされたクラスと関係があるようです。

ReSharper は _t を static にすることを提案していますが、それはオプションではありません。どうすればこれに対処できますか?

public sealed partial class C
{
    string _t;

    class N
    {
        void m()
        {
            _t = "fie"; // Error occurs here
        }
    }
}
4

1 に答える 1

15

これは Java ではなく、内部クラスはありません。

ネストされたクラスのインスタンスは、コンストラクター内に参照 (別名ハンドル/ポインター) を格納して関連付けを行わない限り、外側のクラスのインスタンスには関連付けられません。

public sealed partial class C
{
    string _t;

    class N
    {
        readonly C outer;

        public N(C parent) { outer = parent; }

        void m()
        {
            outer._t = "fie"; // Error is gone
        }
    }
}
于 2012-06-11T23:48:22.447 に答える