我有這樣的代碼:c#6錯誤?虛擬新方法奇怪的行爲
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Foo foo = new Foo();
Bar bar = new Bar();
Baz baz = new Baz();
Foo fooBar = new Bar();
Foo fooBaz = new Baz();
Bar barBaz = new Baz();
foo.Test();
bar.Test();
baz.Test();
fooBar.Test();
fooBaz.Test();
barBaz.Test();
Console.ReadLine();
}
}
internal class Foo
{
public virtual void Test()
{
Console.WriteLine("Foo");
}
}
internal class Bar : Foo
{
public new virtual void Test()
{
Console.WriteLine("Bar");
}
}
internal class Baz : Bar
{
public override void Test()
{
Console.WriteLine("Baz");
}
}
}
它輸出我:
Foo
Bar
Baz
Foo
Foo
Baz
但是,我認爲它應該是:
Foo
Bar
Baz
Foo
Baz
Baz
因爲巴茲被重寫方法。這裏發生了什麼? 我錯過了什麼嗎?爲什麼fooBaz.Test()的輸出是「Foo」而不是「Baz」?
準確,巴茲被覆蓋方法。 Baz應該首先由編譯器考慮,不是嗎? –
喬恩Skeet應該解釋這一個,因爲我仍然不明白,哈哈哈 –