コンテナクラスと外部クラスにアクセスできるネストされたクラスを定義しようとしていますが、コンテナクラスのインスタンスのみがネストされたクラスの新しいインスタンスを作成できるように、ネストされたクラスのインスタンス化を制御したいと思います。
進行中のコードは、うまくいけばこれを実証するはずです:
public class Container
{
public class Nested
{
public Nested() { }
}
public Nested CreateNested()
{
return new Nested(); // Allow
}
}
class External
{
static void Main(string[] args)
{
Container containerObj = new Container();
Container.Nested nestedObj;
nestedObj = new Container.Nested(); // Prevent
nestedObj = containerObj.CreateNested(); // Allow
}
}
Nestedがアクセスできるようにするには、パブリックである必要がありますExternal。の基本クラスではないため、 Nestedprotectedのコンストラクターを作成しようとしましたが、Containerインスタンスを作成できません。のコンストラクターをに設定することもできますが、同じアセンブリ内のクラスを含むすべての外部クラスによるコンストラクターへのアクセスを防止しようとしています。これを行う方法はありますか?ContainerNestedNestedinternal
アクセス修飾子を使用してこれを実現できない場合は、内で例外をスローできるかどうか疑問に思いますNested()。new Nested()ただし、呼び出されるコンテキストをテストする方法がわかりません。