受保护的内部构造函数

时间:2012-06-26 08:05:16

标签: c# inheritance

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

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

我被告知这不会起作用,因为组合internal protected被解释为internalprotected,它显然只构造了构造函数protected :((可见从外面看)

问题

  1. 如果确实如此,为什么internal protected被解释为internalprotected而不是internalprotected
  2. 有没有办法可以将构造函数声明为内部并受保护?

3 个答案:

答案 0 :(得分:6)

指定内部就足够了。

这是一个抽象类 - 暗示它的构造函数是受保护的,因为你不能创建它的实例 - 你什么都不能但是继承它。

答案 1 :(得分:4)

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

  • 受保护 - 对于在其中和任何其他程序集中从A继承的所有类都可见
  • 内部 - 对A类程序集中的所有类都可见
  • 受保护的内部 - 对于在其任何其他程序集中以及从A程序集中的所有类继承自A的所有类都可见

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

答案 2 :(得分:0)

你试过吗?

Msdn告诉我们

  

构造函数可以标记为public,private,protected,internal或   受保护的内部。

http://msdn.microsoft.com/en-us/library/ms173115%28v=vs.100%29.aspx