4

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

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

有人告诉我这不起作用,因为组合internal protected被解释为internalORprotected这显然只使构造函数protected:((从外部可见)

问题

  1. 如果这是真的,为什么被internal protected解释为internalORprotected而不是internalAND protected
  2. 有没有办法可以在内部声明一个构造函数并受保护?
4

3 回答 3

7

指定内部就足够了。

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

于 2012-06-26T08:09:08.027 回答
4

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

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

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

于 2012-06-26T09:11:43.577 回答
0

你试过了吗 ?

msdn 告诉我们

构造函数可以标记为公共的、私有的、受保护的、内部的或受保护的内部的。

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

于 2012-06-26T08:09:00.793 回答