我已經得到了有關多態方法的問題。我有兩個類別:基礎類與非虛方法Foo()
它調用它的虛方法Foo (int i)
(是這樣的:Foo() {Foo(1);})
和派生類重寫方法Foo(int i)
新VS覆蓋關鍵字
如果我稱之爲的一個實例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
}
}
是不是像我們去的基類,並調用虛方法,然後我們檢查派生類中如果包含覆蓋方法,如果沒有我們實現基本虛擬方法? – user3101007
@ user3101007:嗯,有點。這不是「去」基本方法的問題 - 它只是找到該方法的最派生類型實現,而「新」啓動一個* new *方法。 –