Видимость вложенного конструктора класса

Существует ли способ ограничить инстанцирование вложенного класса в C#? Я хочу предотвратить вложенный класс, инстанцируемый от любого другого класса кроме вложенного класса, но предоставить полный доступ к вложенному классу из другого кода.

11
задан Suzanne Dupéron 15 September 2015 в 15:39
поделиться

2 ответа

Обычно я создаю интерфейс для функций, которые вы хотите предоставить другим классам, затем делаю вложенный класс закрытым и реализую его интерфейс. Таким образом, определение вложенного класса может оставаться скрытым:

public class Outer
{
    private class Nested : IFace
    {
        public Nested(...)
        {
        }
        //interface member implementations...
    }

    public IFace GetNested()
    {
        return new Nested();
    }
}
27
ответ дан 3 December 2019 в 01:24
поделиться

Короче говоря, нет, вы не можете этого сделать. Существует модификатор доступности «public», что означает «доступный для всего внутри меня или вне меня», и есть модификатор доступности «private», что означает «доступный для всего внутри меня». Не существует модификатора, означающего «доступный для объекта, находящегося непосредственно вне меня, но не для чего-либо вне его», что вам нужно будет пометить конструктор как. Это просто не та концепция, которую разработчики системы типов считали полезной.

Вы можете описать , почему вам нужна такая безумная доступность? Возможно, есть лучший способ получить желаемое.

6
ответ дан 3 December 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: