【发布时间】:2014-03-25 23:35:05
【问题描述】:
我有一个关于多态方法的问题。我有两个类:具有非虚拟方法Foo( ) 的基类调用其虚拟方法Foo (int i)(如下所示:Foo() {Foo(1);}) 和覆盖方法Foo(int i) 的派生类。
如果我调用派生类实例的Foo() 方法,演练如下:base Foo() -> override Foo(int i)。但是,如果我将覆盖方法更改为新的,则演练如下:base Foo -> base Foo(int i)。它甚至没有用到新的Foo(int i) 方法。请解释这些方法的顺序以及为什么会这样。
using System;
class Program
{
sealed void Main()
{
DerivedClass d = new DerivedClass();
//Goes to BaseClass Foo() method
//then goes to Derived Foo(int i ) method
d.Foo();
}
}
class BaseClass
{
public void Foo() { Foo(1); }
public virtual void Foo(int i) { // do something;
}
}
class DerivedClass : BaseClass
{
public override void Foo(int i) { //Do something
}
}
/////////////////////////////////////// /////////////////////
using System;
class Program
{
sealed void Main()
{
DerivedClass d = new DerivedClass();
//Goes to BaseClass Foo() method
//then goes to base Foo(int i) method
//never gets to Foo(int i) of the derived class
d.Foo();
}
}
class BaseClass
{
public void Foo() { Foo(1); }
public virtual void Foo(int i) { // do something;
}
}
class DerivedClass : BaseClass
{
public new void Foo(int i) { //Do something
}
}
【问题讨论】:
标签: c# polymorphism overriding