4

パブリックであるが、その親クラスによってのみインスタンス化できるネストされたクラスを持つことは可能ですか?

 public class parent
{
    public class child
    {
        public string someValue;
    }

    public child getChild()
    {
        return new child();
    }
}

この例では、「子」クラスは「親」の外部のコードによってインスタンス化できます。外部コードで「子」タイプを表示できるようにしたいのですが、独自のタイプを作成することはできません。

例えば

var someChild = new parent.child();
4

3 に答える 3

15
  1. パブリックインターフェイスを作成します。
  2. 子クラスをプライベートにします。
  3. 子にインターフェースを実装させます。
  4. メソッドgetChildに新しい子を作成させ、インターフェイスタイプを返します。

コメントやその他の回答で述べたように、内部クラス自体をパブリックのままにして、内部クラスのコンストラクターのアクセス修飾子を内部またはプライベートに変更することもできます。

于 2012-05-16T13:59:39.570 に答える
4

内部の空のコンストラクターを定義する

public class child     
{         
    internal child() {}
    public string someValue;     
}  
于 2012-05-16T14:02:32.323 に答える
2

(子クラスの)コンストラクターの保護レベルをに設定することにより、作成をアセンブリーに制限できますinternal

または、@Servyによって指示されたインターフェイス。

于 2012-05-16T14:02:24.580 に答える