Частный (скрытый) базовый класс C#

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

Например:

using System.IO;

class BaseOutput: Stream           // Hidden base class
{
    protected BaseOutput(Stream o)
    { ... }

    ...lots of common methods...
}

public class MyOutput: BaseOutput  // Public subclass
{
    public BaseOutput(Stream o):
        base(o)
    { ... }

    public override int Write(int b)
    { ... }
}

Здесь я хочу, чтобы класс BaseOutputбыл недоступен для клиентов моей библиотеки, но чтобы подкласс MyOutputбыл полностью открытым. Я знаю, что C# не позволяет базовым классам иметь более ограниченный доступ, чем подклассы, но есть ли другой законный способ добиться того же эффекта?

UPDATE

Мое решение для этой конкретной библиотеки состоит в том, чтобы сделать базовый класс publicи abstractи задокументировать его с помощью «Не использовать этот базовый класс непосредственно». Я также делаю конструктор базового класса внутренним, что эффективно предотвращает использование или наследование класса внешними клиентами.

(Обидно, потому что другие языки OO позволяют мне иметь скрытые базовые классы.)

16
задан David R Tribble 4 September 2015 в 15:34
поделиться