C#private(隐藏)基类

Dav*_*ble 16 c# inheritance private base-class

是否可以使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)
    { ... }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我希望BaseOutput我的库的客户端无法访问该类,但允许子类MyOutput完全公开.我知道,C#不允许基类具有比子类更严格的访问,但有获得同样的效果的一些其他合法的方式?

UPDATE

我对这个特殊的库解决方案是让基类publicabstract,并与记录它"不要直接使用这个基类".我还创建了基类的构造函数internal,它有效地防止外部客户端使用或继承该类.

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

Cod*_*aos 14

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

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

  • 因为它有时会为我节省相当多的样板.例如,在几个类中实现相同的接口时. (4认同)
  • 重点是将尽可能多的常用方法和变量放入共享基类中,这样就不必在每个子类中编写每一个方法和变量.这是基类的一种常见用法,即共享实现代码而不是不必要地复制代码. (3认同)
  • 太糟糕了。Java 让我这样做。 (2认同)

Jef*_*ins 5

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