C#私有(隐藏)基类

是否可以使C#基类只能在它编译成的库程序集中访问,同时使从其inheritance的其他子类公开?

例如:

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

我对这个特定库的解决方案是将基类设置为publicabstract ,并使用“不要直接使用此基类”来记录它。 我还使基类的构造函数internal ,这有效地防止外部客户端使用或inheritance该类。

(这很遗憾,因为其他OO语言让我有隐藏的基类。)

不幸的是不是 您无法从内部或私有类派生公共类。

您需要公开基类,或者需要为所有类似的类声明所有方法。 如果你去再次声明所有方法的路径,那么创建一个helper类可能很有用,它有实际的实现。 仍然是相当多的样板。

考虑诸如Facade之类的模式。 这就是他们的目的。 我不认为你可以通过直接inheritance实现你所需要的。

根据“许多常用方法”的作用,您可以使用内部扩展方法实现一些:

 internal static class MyStreamExtensions { internal static int UsefulOne(this Stream stream) { return 42; } } 

另一种方法是使内部构造函数防止从该类无意中派生:

 public class BaseOutput: Stream { internal BaseOutput(Stream o) { ... } ...lots of common methods... } 

与层次结构中“不真实可见”的中间类相比,这将使代码更易理解。