Angenommen, wenn ich eine Schnittstelle haben, wie unten definiert:C# Interface-Vererbung zu Abstrakte Klasse
public interface IFunctionality
{
void Method();
}
und ich diese Schnittstelle für eine abstrakte Klasse implementieren, wie unten dargestellt:
public abstract class AbstractFunctionality: IFunctionality
{
public void Method()
{
Console.WriteLine("Abstract stuff" + "\n");
}
}
habe ich wieder ein konkrete Klasse, die aus der abstrakten Klasse wie folgt übernommen:
public class ConcreteFunctionality: AbstractFunctionality
{
public void Method()
{
Console.WriteLine("Concrete stuff" + "\n");
}
}
Jetzt habe ich die folgenden co de,
Die Ausgabe, die ich nach der Ausführung dieses Zeug bekomme, ist wie folgt
Concrete stuff
Abstract stuff
Abstract stuff
Aber was ich habe den Ausgang erwartet zu werden „Concrete Stuff“ in allen drei Fällen als das, was ich hier mache die Referenz von ConcreteFunctionality
auf die Variablen des Typs AbstractFunctionality
und IFunctionality
zuweist.
Was geschieht intern? Bitte klären Sie.
Dies könnte etwas aufheben: http://stackoverflow.com/questions/392721/difference-between-shadowing-and-overriding-in-c- – Stormenet
"Es ist versteckt, nicht überschrieben" - ein gutes Mantra zu erinnern. (Aber Ihr Compiler sollte dies erwähnt haben; haben Sie Ihre Warnungen herausgefiltert?) – kmote