【问题标题】:Inconsistent accessibility: base class is less accessible than class可访问性不一致:基类比类更难访问
【发布时间】:2012-10-27 13:11:59
【问题描述】:

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

我该怎么做?

【问题讨论】:

    标签: c# dll access-specifier


    【解决方案1】:

    你没有,你也不能。

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

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

    【讨论】:

    • 还是要保护基类上的所有方法/属性?但是课程本身是公开的吗?
    • @Liam 这取决于您要保护的内容;例如,如果外部人员可以对其子类化,他们无论如何都可以访问这些方法。
    • @Liam 是的,internal 会阻止外部人员轻松访问;当然,通过反思,他们无论如何都可以做大部分事情。
    【解决方案2】:

    只是为了澄清我在 @Marc Gravel 的回答中在 cmets 中所说的话,您可以

    public ChildClass : ParentClass
    {
    
    }
    
    public ParentClass
    {
       internal void MethodIdontWantToExpose()
      {
    
      }
    
    }
    

    也就是说interface 可能是最好的解决方案

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-05-15
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 2023-03-24
        相关资源
        最近更新 更多