2012-04-25 12 views
3

外部クラスのコンストラクタで内部クラスのオブジェクトをC#に作成できますか?それは合法ですか? Java用内部クラスオブジェクトを外部クラスのコンストラクタにC#

public class Outer 
{ 
    public Inner InnerObj {get; set; } 

    public Outer() 
    { 
     Inner inner = new Inner(); 
    } 

    public Outer(Inner inner) 
    { 
     InnerObj = inner; 
    } 

    public class Inner 
    { 
    } 
} 

私はリンクの下からの参照を取る: Can we create an object of the inner class in the constructor of the outer class?

私の同僚は、これはC#では不可能であり、それは完全に違法だと述べました。私を案内してください。

+5

は、いくつかの答えを受け入れる... – MoonKnight

+2

あなたはそれを試してみました! –

+1

あなたは同僚ではなくコンパイラに耳を傾けなければなりません。それは[それはちょうどいいコンパイル](http://ideone.com/79YB9)を見ることは難しくありません。 – Jon

答えて

2

あなたの内部クラス公共

public class Inner { } 
+0

はい、私の内部クラスはパブリッククラスです。 –

1

を宣言した場合、あなたのコードの問題は、呼び出し元のコードは、それが外部クラスの外にアクセスできないように、内側objが何であるかを知っているかである可能です。

より良い設計は、内部クラスを外部クラスの外に置くことであり、そのようにしっかりと結合されないようにすることです。オブジェクトをインタフェースに渡します。

Innerpublicなくなるまで(リードエラーをコンパイラに)違法だ
public class Outer 
{   
    public Outer(IInner inner) 
    { 

    } 
} 

public class Inner: IInner 
{ 
} 

public Interface IInner 
{ 
} 
0

一般公開とした後、それは絶対に合法です。

+0

パブリッククラスの内部クラス。今は違法です。 –

+1

@sarooptrivedi:今はすべて問題ありません。 FCL自体にも同じものがあります。 'Dictionary + KeyCollection'(リフレクターを使って調べることができます) – abatishchev

+0

これを試してみます。 –

1

もちろん、可能です。技術的には、あなたのコードに間違いはありません。

ただし、これは公共の入れ子になったクラスを使用することを推奨されていないことを、詳細については、この質問を参照してください。

関連する問題