Hallo!
ich fuchse mich gerade etwas weiter in C# ein und da ist mir eben was Aufgefallen.
Folgendes Szenario:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| abstract class MyBase { abstract public bool DoSometing(); }
class AwesomeClass : MyBase { public AwesomeClass() { System.Console.Out.WriteLine("A Awesome Class was created"); }
public override bool DoSometing() { System.Console.Out.WriteLine("AwesomeClass.DoSometing"); return true; } } |
So.
Jetzt verstehe ich aber nicht warum folgendes so Funktioniert:
C#-Quelltext
1: 2:
| MyBase a = new AwesomeClass(); ((MyBase)a).DoSometing(); |
Ausgabe:
Quelltext
1: 2:
| A Awesome Class was created AwesomeClass.DoSometing |
Die erste Zeile ist ja noch logisch.
Es wird ja auch eine AwesomeClass" erzeugt.
Aber bei der 2. hätte ich eher einen Fehler erwartet. immerhin Caste ich nach einer Abstrakten Klasse.
Jetzt meine Frage: Warum reagiert der jetzt genau so?
Ich halte das schon für ein Fehlverhalten oder gibt es da eine Erklärung für?
Ich weiß dass dieses Beispiel nicht Sinnvoll ist, aber ich versuche halt möglichst viele Aspekte der Sprache zu verstehen.
MfG Teekeks