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
(他のオブジェクト指向言語では基本クラスを非表示にできるので、残念です。)