Ich habe diesen Code:C# 6 Fehler? virtuelle neue Methode seltsame Verhalten
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");
}
}
}
gibt sie mir:
Foo
Bar
Baz
Foo
Foo
Baz
Aber ich dachte, es sein sollte:
Foo
Bar
Baz
Foo
Baz
Baz
Da Baz die zwingende ist Methode. Was passiert hier? Fehle ich etwas? Warum ist die Ausgabe für fooBaz.Test() "Foo" statt "Baz"?
genau ist Baz die Methode überschrieben. Baz sollte zuerst vom Compiler berücksichtigt werden, oder? –
Jon Skeet sollte das erklären, weil ich es immer noch nicht verstehe, hahahah –