基本调用是否在c#中动态绑定?

时间:2015-11-05 09:21:55

标签: c# polymorphism dynamic-binding

出于好奇:在C#中使用base关键字进行动态绑定的调用(即是多态调用)?

考虑以下示例:

public class A
{
    public virtual void WriteSomething() 
    { 
        Console.WriteLine("Hello from A"); 
    }
}

public class B : A
{
    public override void WriteSomething() 
    { 
        base.WriteSomething();
        Console.WriteLine("Hello from B");
    }
}

public class Program
{
    public static void Main()
    {
        A instance = new B();
        instance.WriteSomething();
    }
}

我知道当客户端(在此示例中为Main方法)调用instance.WriteSomething时,此调用是动态绑定的。但是类base.WriteSomething中重写方法中的B调用怎么办?我假设它不是动态绑定的,因为编译器在编译时知道基类,因此不需要动态绑定 - 但我找不到任何文档。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我刚看了中间语言,可以看到base调用没有动态绑定(蓝色矩形):

enter image description here