多态性和c#

Tal*_*ner 5 c# polymorphism

最近在MS采访中提出了一个基本问题

class A {
    public virtual void Method1(){}

    public void Method2() {
        Method1();
    }
}

class B:A {
    public override void Method1() { }
}

class main {
    A obk = new B();
    obk.Method2(); 
}
Run Code Online (Sandbox Code Playgroud)

那么调用哪个函数?抱歉打字错误.

Jus*_*ner 12

B.Method1();
Run Code Online (Sandbox Code Playgroud)

被调用因为它正确覆盖了虚方法 A.Method1();


And*_*are 5

在这种情况下B.Method1被调用.这是因为即使变量是作为A实例的实际类型键入的B.CLR Method1基于实例的实际类型而不是变量的类型以多态方式调度调用.