2011-11-18 20 views
0

プライベートネストされたクラスを作成した場合、どのように呼び出し元クラスから変数とメソッドにアクセスできますか?呼び出すクラスの変数を継承する

例:上記の例で

public class ClassA 
    { 
     protected int MyVar=100; 

     public MethodA() 
     { 
     // <some code> 
     myObjectClassB.DoSomething(); 
     // <some code> 
     } 

     private class ClassB 
     { 
     public DoSomething() 
     { 
     } 
     } 
    } 

私はClassBのはClassA.MyVarにアクセスできるようにする必要があります - これは可能ですか?

答えて

2

ClassBのインスタンスを作成するときは、それを所有するClassAへの参照を与えます。

private class ClassB 
    { 
    private readonly ClassA _owner; 

    public ClassB(ClassA owner) 
    { 
      _owner = owner; 
    } 

    public DoSomething() 
    { 
    } 
    } 

これについて注目すべき点は、プライベートネストされたクラスが実際に_ownerを通じてClassAのプライベートメンバーにアクセスできることです。これは、クラスの全体的なプライベート状態にアクセスする必要がある内部ヘルパークラスを持つ場合に便利です。

0

Ok Dan Bryantは、彼にアクセスするには、保護された変数を内部変数にする必要があることを忘れていたことを除いて、私にそれを打ち明けました。ネストされたクラスは、ネーミング規則以外はネストされていない他のどのクラスとも変わりません。それはネストされたクラスに特別なpriveledgesを取得しません。それは純粋にネストする組織的なものです。

編集:さて、私はそれについて間違っているかもしれません。私は実際にこの後ダンの答えの残りを読んで、おそらく私は間違っていたようだ:)

編集2:カップルの検索の後、私は私の考えでは全く間違っていないことがわかったが、一緒に働いている。以前のC++仕様では許可されていませんでしたが、ほとんどのコンパイラで許可されていましたが、最終的にはコンパイラで実際に何が起きているかを反映するようにドキュメントを変更しました。

関連する問題