C# 不一致的可访问性:基类的可访问性不如类

C# 不一致的可访问性:基类的可访问性不如类,c#,dll,access-specifier,C#,Dll,Access Specifier,所以我在DLL中有一个抽象基类和该类的子类。我希望child是公共的,但是base是私有的,这样就不能在dll之外访问它 我该怎么做呢?你没有,你也不能 如果要将类公开为public,则基类型必须是public。另一个选项是使用公共接口,并且仅通过接口公开类型(可能在某处使用工厂方法创建实例) 最后一个选择是封装基类,而不是继承它。为了澄清我在@Marc Gravel的答案评论中所说的话,你可以 也就是说,接口可能是最好的解决方案将其公开,将所有构造函数都设置为内部(如果使用默认构造函数,请添加

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


我该怎么做呢?

你没有,你也不能

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


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

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


也就是说,
接口
可能是最好的解决方案

将其公开,将所有构造函数都设置为内部(如果使用默认构造函数,请添加一个无参数构造函数来覆盖该构造函数)


那么,虽然它是公共的且未密封的,但它不能由外部代码进行子分类。

或者要保护的基类上的所有方法/属性?但是这个类本身是公开的吗?@Liam,这取决于你想保护什么;例如,如果某个外部人员可以将其子类化,那么他们仍然可以访问这些方法。@Liam yes,
internal
将阻止外部人员轻松访问;当然,通过反思,他们无论如何都可以做大多数事情。
public ChildClass : ParentClass
{

}

public ParentClass
{
   internal void MethodIdontWantToExpose()
  {

  }

}