Можно ли сделать базовый класс 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 # не позволяет базовым классам иметь более ограниченный доступ, чем подклассы, но есть ли другой законный способ достижения такого же эффекта?
ОБНОВЛЕНИЕ
Мое решение для этой конкретной библиотеки - создать базовый класс public и abstract и задокументировать его с помощью «Не использовать этот базовый класс напрямую». Я также создаю конструктор базового класса internal, который эффективно предотвращает использование или наследование класса внешними клиентами.
(Это позор, потому что другие языки O-O позволяют мне иметь скрытые базовые классы.)
BaseOutputвнутренним, чтобы внешний код не мог наследовать от него? - person Mike Zboray   schedule 02.06.2012