tôi có mã này:lỗi C# 6? ảo phương pháp mới lạ hành vi
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");
}
}
}
nó ra tôi:
Foo
Bar
Baz
Foo
Foo
Baz
Nhưng, tôi nghĩ rằng nó nên là:
Foo
Bar
Baz
Foo
Baz
Baz
Vì Baz được trọng các phương pháp. Chuyện gì đang xảy ra ở đây? Tôi có thiếu gì đó không? Tại sao đầu ra cho fooBaz.Test() là "Foo" thay vì "Baz"?
chính xác, Baz được trọng phương pháp này. Baz nên được xem xét đầu tiên bởi trình biên dịch, phải không? –
Jon Skeet nên giải thích điều này, bởi vì tôi vẫn không hiểu, hahahah –