基本调用是否在 C# 中动态绑定?
Are base calls dynamically bound in c#?
出于好奇:在 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
时,此调用是动态绑定的。但是在classB
中覆盖方法中的base.WriteSomething
调用呢?我假设它不是动态绑定的,因为编译器在编译时知道基数 class,因此不需要动态绑定 - 但我找不到任何相关文档。
提前感谢您的帮助!
好吧,我刚刚看了一下中间语言,可以看到 base
调用不是动态绑定的(蓝色矩形):
出于好奇:在 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
时,此调用是动态绑定的。但是在classB
中覆盖方法中的base.WriteSomething
调用呢?我假设它不是动态绑定的,因为编译器在编译时知道基数 class,因此不需要动态绑定 - 但我找不到任何相关文档。
提前感谢您的帮助!
好吧,我刚刚看了一下中间语言,可以看到 base
调用不是动态绑定的(蓝色矩形):