Существует ли способ ограничить инстанцирование вложенного класса в C#? Я хочу предотвратить вложенный класс, инстанцируемый от любого другого класса кроме вложенного класса, но предоставить полный доступ к вложенному классу из другого кода.
Обычно я создаю интерфейс для функций, которые вы хотите предоставить другим классам, затем делаю вложенный класс закрытым и реализую его интерфейс. Таким образом, определение вложенного класса может оставаться скрытым:
public class Outer
{
private class Nested : IFace
{
public Nested(...)
{
}
//interface member implementations...
}
public IFace GetNested()
{
return new Nested();
}
}
Короче говоря, нет, вы не можете этого сделать. Существует модификатор доступности «public», что означает «доступный для всего внутри меня или вне меня», и есть модификатор доступности «private», что означает «доступный для всего внутри меня». Не существует модификатора, означающего «доступный для объекта, находящегося непосредственно вне меня, но не для чего-либо вне его», что вам нужно будет пометить конструктор как. Это просто не та концепция, которую разработчики системы типов считали полезной.
Вы можете описать , почему вам нужна такая безумная доступность? Возможно, есть лучший способ получить желаемое.