我正在阅读这本书"C# Language",并从Vladimir Reshetnikov那里听到这封信:
如果静态类声明受保护或 受保护的内部成员,发生编译时错误(CS1057)。
我可以知道为什么吗? 有受保护成员的静态类有什么问题? 静态类可以有私有成员所以我猜这个CS1057错误不是由于可访问性,但也许是因为编译问题?因为受保护的成员可以在子类中被覆盖......但我无法弄清楚原因。
答案 0 :(得分:16)
因为您无法继承静态类,protected
没有任何意义 - 只有public
和private
才有意义。
可在此处找到更多详细信息:Why can't I inherit static classes?
答案 1 :(得分:3)
受保护的成员意味着可以从子/派生类访问它们。但静态类的主要特征是:
仅包含静态成员;
无法实例化;
密封。
这就是静态类不能拥有受保护成员的原因。
答案 2 :(得分:0)
.NET中的继承仅适用于实例库。静态方法是在类型级别上定义的,而不是在实例级别上定义的。这就是为什么覆盖不适用于静态方法/属性/事件......
静态方法只在内存中保存一次。没有为它们创建的虚拟表等。
如果在.NET中调用实例方法,则始终为其提供当前实例。这是.NET运行时隐藏的,但它确实发生了。每个实例方法都将第一个参数作为运行该方法的对象的指针(引用)。静态方法不会发生这种情况(因为它们是在类型级别定义的)。编译器应如何决定选择要调用的方法?
(littleguru)