1

例は千の愚かな質問の価値があるので:

public class OuterClass
{
    public static class InnerClassEventArgs : EventArgs
    {
        public static int SomeInt;
    }
}

そしてはるか遠くの銀河で:

public void SomeFunkyFunc()
{
    OuterClass Instance1;
    OuterClass Instance2;

    Instance1.InnerClassEventArgs.SomeInt = 1;
    Instance2.InnerClassEventArgs.SomeInt = 2;

    //WHAT WOULD Instance1.InnerClassEventArgs.Someint == ?
}

はい、これを入力したことで、自分の質問に答えるのに必要なものをほぼすべてコーディングしたことに気付きました。私より賢い人が頭のてっぺんから知っているなら、私は新しいプロジェクトを作成して問題を経験したくありません。

4

2 に答える 2

3

Instance1.InnerClassEventArgs.SomeInt静的フィールドはクラスのすべてのインスタンス間で共有されます-またはMSDNが言うように

静的メンバーには、インスタンス名ではなく、常にクラス名でアクセスします。クラスのインスタンスの数に関係なく、静的メンバーのコピーは1つだけ存在します。

特定の例はコンパイルされないことに注意してください。「非静的コンテキストでは静的クラス'InnerClassEventArgs'にアクセスできません」というエラーメッセージが表示されます。

代わりに次のコードを使用する必要があります。これにより、動作がより理解しやすくなります。

OuterClass.InnerClassEventArgs.SomeInt = 1;
OuterClass.InnerClassEventArgs.SomeInt = 2;
于 2012-11-29T20:04:34.777 に答える
0

静的クラスには、そのすべての使用法(この場合はOuterClassのすべてのインスタンス)によって「共有」されたインスタンスが1つだけあります。したがって、そのオブジェクトの状態は、使用によって行われたすべての変更の合計になります。この単純な例では、SomeIntは、再度アクセスするために使用したOuterClassインスタンス(Instance1またはInstance2)に関係なく、2になります。

私は便利なことに次のすべてを無視しています:

  • 静的クラスは他のクラスから継承できません。したがって、InnerClassEventArgsはEventArgsから継承できません。
  • Instance1とInstance2は初期化されていません。これにより、ReSharperを使用する場合に独自のコンパイル時エラーが発生します(「Xはアクセスする前に初期化されない可能性があります」)。
  • 静的メンバー(ネストされた静的クラスを含む)は、1つのインスタンスに基づいてアクセスすることはできません。静的コンテキストでInnerClassEventArgsにアクセスします。
于 2012-11-29T20:06:35.613 に答える