2009-08-07 6 views
1

これはおそらく単純ですが、これを行うことが可能かどうかはわかりません。シンプルなC#質問:クラスのネスト、アクセシビリティ

私は、次のコードを持っている:私はすでにインスタンス化した場合

public class A {  
thisMethod(); 

public class B {  
    someMethod();  
    } 
} 


public class C {  
A myA = new A();  
A.B.someMethod();  
} 

私はBにアクセスできないのはなぜ?

THanksあなたの助けを前に!

答えて

5

あなたはA.Bにインスタンスメソッドを呼び出すためにA.Bのインスタンスを必要とする:

A.B foo = new A.B(); 
foo.SomeMethod(); 

あなたの例では、あなたも、あなたが作成したのだ新しいインスタンスを使用しようとしていませんでした。

Javaのバックグラウンドの場合は、C#のネストされたクラスがという静的なのJavaクラスのネストされたクラスであることを指摘する価値があります。ネストされたクラスのインスタンスからコンテナクラスのインスタンスへの暗黙の参照はありません。 (アクセスは逆に、Javaでは外部クラスがネストされたクラスのプライベートメンバーにアクセスできます;ネストされたクラスはその外部クラスのプライベートメンバーにアクセスできます)

+0

私はそれをやった理由を推測しますその方法は論理的なグループ分けのためのものでした。ですから、私はPlayer.ControlsとPlayer.Libraryを、巨大なクラスのすべてのメソッドの代わりに使用します。 – WedTM

+0

しかし、なぜそれらを巣に入れますか?なぜ、 "Player"名前空間の中だけで、クラスを完全に別々にする必要はありませんか? –

0

"B"という静的メソッドまたはクラスAのプロパティのように、アクセスしようとしています。それでもインスタンスを作成する必要があります。これはクラス宣言です。私はあなたが探していると思う:

ネストされたクラスを公開することはお勧めできません。