In den folgenden C# SchnipselWarum kann ein Compiler die Methode nicht außer Kraft setzen?
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal sound");
}
}
public class Dog:Animal
{
public override void MakeSound()
{
Console.WriteLine("Dog sound");
}
}
class Program
{
static void Main(string[] args)
{
Animal an = new Dog();
an.MakeSound();
Console.ReadLine();
}
}
die Methode aufgerufen werden soll, wird zur Laufzeit bestimmt. Warum genau kann der Compiler nicht herausfinden, welche Methode er aufrufen soll?
Warum sieht der Compiler nicht, dass sich an
auf ein Dog
Objekt bezieht und dann die Methode aus dieser Klasse auswählt?
Und wie bestimmt die Laufzeit, welche Methode aufgerufen werden soll?
Haben Sie jemals von Abstraktion gehört? –
Mine sagt Dog Sound, wenn ich dies kompilieren es scheint mir perfekt gut – BugFinder
Sie haben nicht gefragt, was die Ausgabe zur Laufzeit wäre. In der Tat haben sie in der eigentlichen Frage ziemlich deutlich gemacht, dass sie wissen, was zur Laufzeit passiert. Die Frage war, warum der Compiler nicht weiß, dass "an" zu einer Kompilierzeit ein "Hund" ist. – Nick