2012-06-26 72 views
3

我有一个类ClassA这是其他类的基类。我希望这个类的构造函数是内部的并且是受保护的,所以它不能从我的程序集外部继承和实例化(我不能将它封闭起来,因为我有其他内部类继承它,你可以看到我的其他相关问题here),所以我修改了它是这样的:受保护的内部构造函数

public abstract ClassA{ 
    internal protected ClassA(){ 
    } 
} 

我已被告知,由于组合internal protected被解释为internal OR protected这显然使得构造只有protected :((从可见这是不行的外面)

问题

  1. 如果是真的,为什么internal protected解释为internal OR protected而不是internalprotected
  2. 有没有办法可以声明一个构造函数的内部和保护?

回答

6

指定内部就足够了。

这是一个抽象类 - 这意味着它的构造函数是受保护的,因为你不能创建它的一个实例 - 你不能继承它。

+1

其实,这是不正确的。在大会之外,“保护”修改器仍在发挥作用。如果仅将空构造函数声明为“内部”,则可以继承该程序集外的类,但不能向其中添加自定义构造函数。如果你让它成为“受保护的内部”,那么你可以。 – RobinHood70

+1

@ RobinHood70我只是回答了他的具体查询。在一般情况下,你是对的。 – Asti

4

如果您将构造函数指定为内部它将对您的程序集中的所有类都可见,并且对于其它类以外的类将不可见,这正是您想要实现的。简言之,如果一个构造或类A的类成员是:

  • 保护 - 可见于从A继承在其和任何其它组件
  • 内部所有类 - 可见的所有类在A级的装配
  • 保护的内部 - 可见于从A继承其在任何其他组件和所有类在A的组件的所有类

因此,在你的情况下,你只需要指定构造函数为内部。

相关问题