Dan*_*nte 2 c# oop polymorphism
我一直在阅读有关多态性的内容,并且经历了一些有趣的事情。
我创建了两个类:一个超类和一个派生类。正如您所看到的,派生类继承自超类并使用其方法。
在派生类中,我重写了超类的方法。
所以我的问题是:我想从派生类的对象调用超类方法
例如:
derivedClass a = new derivedClass()
a.method();
Run Code Online (Sandbox Code Playgroud)
我想a.methood()执行超类方法。
那可能吗?
总结你的问题:你有一个基类和一个派生类。派生类重写基类的虚拟方法。给定派生类的实例,是否可以强制调用该方法的基类版本,而不是派生类?
简短的回答:从班级内部来看,是的。从课堂外来看,没有。
本质上,您希望在这里执行的是对虚拟方法的非虚拟调用。对基类方法进行非虚拟调用是合法的,但只能从类内部进行:
class B
{
public virtual void M() { Console.WriteLine("B.M"); }
}
class D : B
{
public override void M() { Console.WriteLine("D.M"); }
public void BM() { base.M(); }
}
...
D d = new D();
d.M(); // D.M
d.BM(); // B.M
Run Code Online (Sandbox Code Playgroud)
现在,对于高级玩家来说,有一些偷偷摸摸的方法可以B.M使用 的实例D作为接收者进行调用,我不会告诉您它们是什么。您不应该尝试这样做。 CLR 可能会将此类尝试标记为违反其“验证代码”规则。虚拟覆盖规则的存在是为了您的方便和安全。不要试图绕过这些规则。