我正在阅读《C# Language》一书,并从 Vladimir Reshetnikov 那里得到了这个注解:
如果静态类声明受保护或受保护的内部成员,则会发生编译时错误 ( CS1057 )。
我可以知道为什么吗?具有受保护成员的静态类有什么问题?静态类可以有私有成员所以我猜这个 CS1057 错误不是由于可访问性,但可能是由于编译问题?作为受保护的成员可以在子类中被覆盖......但我不知道为什么。
我正在阅读《C# Language》一书,并从 Vladimir Reshetnikov 那里得到了这个注解:
如果静态类声明受保护或受保护的内部成员,则会发生编译时错误 ( CS1057 )。
我可以知道为什么吗?具有受保护成员的静态类有什么问题?静态类可以有私有成员所以我猜这个 CS1057 错误不是由于可访问性,但可能是由于编译问题?作为受保护的成员可以在子类中被覆盖......但我不知道为什么。
因为您不能继承静态类,所以protected
没有任何用途 - 只有在这里才有意义。public
private
更多细节可以在这里找到:为什么我不能继承静态类?
受保护的成员意味着可以从子/派生类访问它们。但是静态类的主要特点是:
只包含静态成员;
无法实例化;
被密封。
这就是静态类不能有受保护成员的原因。
.NET 中的继承仅适用于实例库。静态方法是在类型级别而不是在实例级别定义的。这就是为什么覆盖不适用于静态方法/属性/事件...
静态方法只在内存中保存一次。没有为他们创建的虚拟表等。
如果您在 .NET 中调用实例方法,则始终为其提供当前实例。这被 .NET 运行时隐藏了,但它确实发生了。每个实例方法都有一个指向运行该方法的对象的指针(引用)作为第一个参数。静态方法不会发生这种情况(因为它们是在类型级别定义的)。编译器应该如何决定选择要调用的方法?
(小小)