A类: -
class classOne
{
public int intOne = 0;
public int Sub()
{
return 1;
}
public virtual int Add()
{
return 1;
}
}
第二类: -
class classTwo:classOne
{
public new int Sub()
{
return 2;
}
public override int Add()
{
return 2;
}
}
三级
class classThree : classTwo
{
public int Sub()
{
return 3;
}
}
Program.cs的
classOne obj = new classOne();
classThree obj3 = new classThree();
obj = obj3;
Console.WriteLine(obj.Sub());
输出为1.
我怀疑是我用classOne初始化了一个obj。然后我使用新关键字classThree obj3 = new classThree();
为ClassThree分配了相同的对象。它如何调用classOne.sub()
。这是怎么回事?我的理解是,它应该调用classThree.Sub()。
答案 0 :(得分:1)
您尚未使Sub
为虚拟,因此编译器将使用变量的静态类型来确定要调用的实例。由于obj
的静态类型为classOne
,因此会调用classOne.Sub()