21

所以我在 DLL 中有一个抽象基类和该类的子类。我希望孩子是公开的,但基础是私有的,这样就不能在 dll 之外访问它。

我怎么做?

4

3 回答 3

36

你没有,你也不能。

如果要将类公开为public,则基类型必须public。另一种选择是使用public interface, 并且仅通过 公开类型interface(可能在某处使用工厂方法来创建实例)。

最后一种选择是封装基类而不是继承它。

于 2012-11-07T13:08:16.180 回答
18

制作它public,制作所有构造函数internal(如果您使用的是默认构造函数,请添加一个无参数构造函数来覆盖它)。

然后在公开且未密封的情况下,它不能被外部代码子分类。

于 2012-11-07T14:39:05.790 回答
2

只是为了澄清我在对@Marc Gravel 的回答的评论中所说的话,你可以

public ChildClass : ParentClass
{

}

public ParentClass
{
   internal void MethodIdontWantToExpose()
  {

  }

}

那说一个interface可能是最好的解决方案

于 2012-11-07T13:14:05.557 回答