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
我对这个特殊的库解决方案是让基类public和abstract,并与记录它"不要直接使用这个基类".我还创建了基类的构造函数internal,它有效地防止外部客户端使用或继承该类.
(这很遗憾,因为其他OO语言让我有隐藏的基类.)
Cod*_*aos 14
不幸的是.您无法从内部或私有类派生公共类.
您需要公开基类,或者需要为所有类似的类声明所有方法.如果你去再次声明所有方法的路线,那么创建一个辅助类可能很有用,它有实际的实现.仍然是相当多的样板.