假设类 A 继承自类 B,而类 B 又继承自类 C。现在假设在 A 中定义了一个虚方法 void f(),它在 B 和 C 中都被覆盖。从 A 中的任何方法调用 Bf()可以通过简单地使用 base.f() 来完成。从 A 中的方法调用 C.f() 怎么样?

最佳答案

通常,通过覆盖一个类,您接受它提供了您想要的接口(interface)和一些行为。 A 不应该知道它的超父类(super class),除非它的父类(super class)以某种方式显式公开。这实际上是可取的,因为当您子类化 B 时,您不需要知道 C 是如何实现的。您甚至不应该知道涉及 C。

如果b的f()调用base.f(),a的base.f()只需要调用自己的base.f()就可以了。如果没有,那么你自己做的唯一方法就是通过基于反射的侵入式方法。如果您发现自己需要这样做,则您的设计可能存在错误(一方面违反了迪米特法则)。

关于C#如何调用base的base中的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1844086/

10-17 01:44