コンテナクラスと外部クラスにアクセスできるネストされたクラスを定義しようとしていますが、コンテナクラスのインスタンスのみがネストされたクラスの新しいインスタンスを作成できるように、ネストされたクラスのインスタンス化を制御したいと思います。
進行中のコードは、うまくいけばこれを実証するはずです:
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
。の基本クラスではないため、 Nested
protectedのコンストラクターを作成しようとしましたが、Container
インスタンスを作成できません。のコンストラクターをに設定することもできますが、同じアセンブリ内のクラスを含むすべての外部クラスによるコンストラクターへのアクセスを防止しようとしています。これを行う方法はありますか?Container
Nested
Nested
internal
アクセス修飾子を使用してこれを実現できない場合は、内で例外をスローできるかどうか疑問に思いますNested()
。new Nested()
ただし、呼び出されるコンテキストをテストする方法がわかりません。