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());
}
}
Why does this code return "300"?
Because it's virtual.
The whole point of virtual methods is that you always call the overridden version.
That is the definition of an override.
The virtual keyword basically means, "Subclasses can override this method".
The override keyword basically means, "My base class has a virtual method that I am redefining"
I think your confusion is because the this.one() is called from the class A. But, the this still refers to an instance of the class B, which is why the method on B is called.
What @SLaks said.
But specifically, b.three() invokes B.three, which invokes A.three, which invokes B.one.
I think when you say return base.three(); in the overridden method you should acutaly be calling return this.three(); other wise you'll be accessing the base class which is A.
加载中,请稍侯......
精彩评论