静态类声明受保护的成员

时间:2011-07-02 16:53:20

标签: c# compiler-errors static-classes

我正在阅读这本书"C# Language",并从Vladimir Reshetnikov那里听到这封信:

  

如果静态类声明受保护或   受保护的内部成员,发生编译时错误(CS1057)。

我可以知道为什么吗? 有受保护成员的静态类有什么问题? 静态类可以有私有成员所以我猜这个CS1057错误不是由于可访问性,但也许是因为编译问题?因为受保护的成员可以在子类中被覆盖......但我无法弄清楚原因。

3 个答案:

答案 0 :(得分:16)

因为您无法继承静态类,protected没有任何意义 - 只有publicprivate才有意义。

可在此处找到更多详细信息:Why can't I inherit static classes?

答案 1 :(得分:3)

受保护的成员意味着可以从子/派生类访问它们。但静态类的主要特征是:

  1. 仅包含静态成员;

  2. 无法实例化;

  3. 密封。

  4. 这就是静态类不能拥有受保护成员的原因。

答案 2 :(得分:0)

.NET中的继承仅适用于实例库。静态方法是在类型级别上定义的,而不是在实例级别上定义的。这就是为什么覆盖不适用于静态方法/属性/事件......

静态方法只在内存中保存一次。没有为它们创建的虚拟表等。

如果在.NET中调用实例方法,则始终为其提供当前实例。这是.NET运行时隐藏的,但它确实发生了。每个实例方法都将第一个参数作为运行该方法的对象的指针(引用)。静态方法不会发生这种情况(因为它们是在类型级别定义的)。编译器应如何决定选择要调用的方法?

(littleguru)