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

基本调用是否在c#中动态绑定?,c#,polymorphism,dynamic-binding,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.W

出于好奇:在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.writeMething
时,此调用是动态绑定的。但是类
B
中重写的方法中的
base.writeMething
调用呢?我假设它不是动态绑定的,因为编译器在编译时知道基类,因此动态绑定是不必要的——但是我找不到任何关于它的文档


提前谢谢你的帮助

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


是什么让你认为
instance.writeMething
是动态绑定的?这很容易出现无限递归,不是吗?如果一个基类和一个派生类都实现了
f()
,并且派生类调用
base.f()
并向它添加了一些东西,这是一种常见的模式,
base.f()
实际上会再次调用
f()
的最派生的实现(或者语义还会是什么?如果它总是调用最派生的实现,但只调用一个实现,则可以构造类似的场景)@Enigmativity,因为它被声明为虚拟的?@PeterSchneider:你说得对,那会导致无限递归。我还没想到呢。@PeterSchneider-我以为
virtual
只是为了启用重写,编译器仍然硬编码调用。