3

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

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

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

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

    public class Inner
    {
    }
} 

Java の場合、以下のリンクから参照します: 外部クラスのコンストラクターで内部クラスのオブジェクトを作成できますか?

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

4

4 に答える 4

2

Inner class を public と宣言すれば可能です

public class Inner { }
于 2012-04-25T07:57:35.027 に答える
1

あなたのコードの問題は、外部クラスの外ではアクセスできないため、呼び出し元のコードが内部 obj が何であるかをどのように認識するかです。

より良い設計は、内部クラスを外部クラスの外側に配置して、あまり緊密に結合しないようにすることです。また、インターフェイスに対してオブジェクトを渡します。

public class Outer
{        
    public Outer(IInner inner)
    {

    }
}

public class Inner: IInner
{
}

public Interface IInner
{
}
于 2012-04-25T07:57:44.623 に答える
1

もちろん、それは可能です。技術的には、コードに問題はありません (内部を public または外部クラスを internal にする場合)。

ただし、パブリックのネストされたクラスを使用することはお勧めできません。詳細については、この質問を参照してください。

于 2012-04-25T08:07:39.190 に答える
0

それは違法です(コンパイラエラーにつながりますInnerpublic

公開としてマークした後、それは絶対に合法です。

于 2012-04-25T08:02:39.203 に答える