Непоследовательная доступность: базовый класс менее доступен, чем класс
Итак, у меня есть абстрактный базовый класс в DLL и дочерних классах этого класса. Я хочу, чтобы дочерние элементы были общедоступными, но база была закрытой, чтобы доступ к ней не был за пределами DLL.
Как это сделать?
Ответ 1
У вас нет, и вы не можете.
Если вы хотите показать класс как public, базовый тип должен быть public. Еще один вариант - иметь public interface и только выставлять тип через interface (предположительно с помощью метода factory где-то для создания экземпляров).
Один из последних вариантов - инкапсулировать базовый класс, а не наследовать его.
Ответ 2
Сделайте его public, создайте все конструкторы internal (если вы используете конструктор по умолчанию, добавьте конструктор без параметров, чтобы переопределить это).
Затем, будучи общедоступным и не запечатанным, он не может быть подклассифицирован внешним кодом.
Ответ 3
Чтобы уточнить, что я говорил в комментариях к ответу @Marc Gravel, вы могли
public ChildClass : ParentClass
{
}
public ParentClass
{
internal void MethodIdontWantToExpose()
{
}
}
Тем не менее, interface, вероятно, является лучшим решением