Czy można uczynić klasę podstawową C# dostępną tylko w zespole biblioteki, do którego została skompilowana, podczas tworzenia innych podklas, które dziedziczą z niej publicznie?C# prywatna (ukryta) klasa podstawowa
Na przykład:
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)
{ ... }
}
Tutaj chciałbym klasa BaseOutput
być niedostępne dla klientów mojej bibliotece, ale pozwalają podklasa MyOutput
być całkowicie publicznego. Wiem, że C# nie pozwala klasom bazowym mieć bardziej restrykcyjnego dostępu niż podklasy, ale czy istnieje inny legalny sposób osiągnięcia tego samego efektu?
UPDATE
Moje rozwiązanie dla tej konkretnej biblioteki jest, aby klasy bazowej public
i abstract
i udokumentować ją „Nie używaj tej klasy bazowej bezpośrednio”. Tworzę również konstruktora klasy podstawowej internal
, który skutecznie uniemożliwia zewnętrznym klientom korzystanie z klasy lub dziedziczenie tej klasy.
(Szkoda, bo inne języki O-O niech mnie mają ukryte klas bazowych.)
dlaczego nie stworzysz konstruktora 'BaseOutput' tak, aby żaden kod zewnętrzny nie mógł go dziedziczyć? –
@mikez: Tak, właśnie to zrobiłem, zobacz aktualizację powyżej. –
klasa publiczna z wewnętrznym konstruktorem może lepszą opcją (przykład w mojej odpowiedzi) –