Непоследовательная доступность: базовый класс менее доступен, чем класс

Итак, у меня есть абстрактный базовый класс в DLL и дочерних классах этого класса. Я хочу, чтобы дочерние элементы были общедоступными, но база была закрытой, чтобы доступ к ней не был за пределами DLL.

Как это сделать?

Ответ 1

У вас нет, и вы не можете.

Если вы хотите показать класс как public, базовый тип должен быть public. Еще один вариант - иметь public interface и только выставлять тип через interface (предположительно с помощью метода factory где-то для создания экземпляров).

Один из последних вариантов - инкапсулировать базовый класс, а не наследовать его.

Ответ 2

Сделайте его public, создайте все конструкторы internal (если вы используете конструктор по умолчанию, добавьте конструктор без параметров, чтобы переопределить это).

Затем, будучи общедоступным и не запечатанным, он не может быть подклассифицирован внешним кодом.

Ответ 3

Чтобы уточнить, что я говорил в комментариях к ответу @Marc Gravel, вы могли

public ChildClass : ParentClass
{

}

public ParentClass
{
   internal void MethodIdontWantToExpose()
  {

  }

}

Тем не менее, interface, вероятно, является лучшим решением