¿Es posible hacer que una clase base C# sea accesible solo dentro del conjunto de biblioteca en el que está compilada, al tiempo que hace públicas otras subclases que la heredan?C# clase base privada (oculta)
Por ejemplo:
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)
{ ... }
}
Aquí me gustaría la clase BaseOutput
sea inaccesible a los clientes de mi biblioteca, pero permiten la subclase MyOutput
sea completamente público. Sé que C# no permite que las clases base tengan un acceso más restrictivo que las subclases, pero ¿hay alguna otra forma legal de lograr el mismo efecto?
ACTUALIZACIÓN
Mi solución para esta biblioteca particular, es hacer que la clase base public
y abstract
, y para documentar con "No utilice esta clase base directamente". También hago el constructor de la clase base internal
, lo que evita que los clientes externos usen o hereden la clase.
(Es una pena, porque otros idiomas O-O me dejan he escondido clases base.)
¿por qué no haces que el constructor de 'BaseOutput' sea interno para que ningún código externo pueda heredar de él? –
@mikez: Sí, eso es lo que hice, consulte la actualización anterior. –
clase pública con constructor interno tal vez una mejor opción (muestra en mi respuesta) –