新对象创建C#

时间:2014-02-20 10:35:02

标签: oop c#-4.0 inheritance

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()。

1 个答案:

答案 0 :(得分:1)

您尚未使Sub为虚拟,因此编译器将使用变量的静态类型来确定要调用的实例。由于obj的静态类型为classOne,因此会调用classOne.Sub()