为什么this.One从类B而不是从类A的虚拟方法调用重写器方法?

问题描述

|
class A
{
    public virtual int one()
    {
        return 100;
    }

    public virtual int two()
    {
        return 200;
    }

    public virtual int three()
    {
        return this.one();
    }
}

class B : A
{ 
    public override int one()
    {
        return 300;
    }

    public override int two()
    {
        return this.one();
    }

    public override int three()
    {
        return base.three();
    }
}
class Program
{
    static void Main(string[] args)
    {
        A b = new B();
        Console.WriteLine(b.three());
    }
}
为什么此代码返回\“ 300 \”?     

解决方法

        因为是ѭ1。
virtual
方法的全部要点是您总是调用覆盖版本。     ,        那是ѭ3的定义。 关键字1基本上意味着\“子类可以覆盖此方法\”。 关键字
override
的基本含义是,“我的基类有一个我要重新定义的虚拟方法” 我认为您的困惑是因为
this.one()
被称为
A
类。但是,
this
仍然引用类
B
的实例,这就是为什么调用
B
上的方法的原因。     ,        @SLaks说什么。 但具体地说,
b.three()
调用
B.three
,which12ѭ调用
A.three
,which13ѭ又调用
B.one
。     ,        我想当您说return base.three();在重写的方法中,您应该明智地调用return this.three();。否则,您将访问基类A。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...