虚方法调用产生IL代码,有一处不太明白,求助!!!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ConstDomain;
namespace CLRConst
{
public class A
{
public virtual void Print()
{
Console.WriteLine("A Print");
}
}
public class B : A
{
}
public class C : B
{
public override void Print()
{
Console.WriteLine("B Print");
}
}
class Program
{
static void Main(string[] args)
{
A a = new A();
a.Print(); //IL代码:callvirt instance void CLRConst.A::Print()
A b = new C();
b.Print();//IL代码:callvirt instance void CLRConst.A::Print()
C c = new C();
c.Print();//IL代码:callvirt instance void CLRConst.A::Print() 这里有不理解
Console.Read();
}
}
}
::Print()
我知道我肯定是错的,想求助一下
callvirt instance void TYPE::Print()
这个TYPE并不是以声明类型为准的,而是以这个虚方法最开始定义处的类型为准(这里是A)吗?
C# 虚方法
[解决办法]
什么叫继承,什么叫重写
C哪有Print方法,C的Print只是重写A的而已。
public new void Print()
这样C才会有Print方法
[解决办法]
既然是虚方法,自然是从基类开始搜索的。