006
30.06.2007, 19:09 Uhr
0xdeadbeef
Gott (Operator)
|
dynamic_cast ist genau für diese Scherze gedacht - wos dann doch mal nötig ist. Aber...wie mutable, const_cast und Konsorten sind das Sprachkonstrukte, die man nach Möglichkeit vermeiden sollte - wenn ich ein dynamic_cast im Code sehe, weiß ich schon "Aha, dreckiger Hack ums eben mal schnell ans Laufen zu kriegen".
Die ganze Idee hinter Objektorientierung und Klassenvererbung ist ja, dass du an dieser Stelle die abgeleitete Klasse garnicht mehr benötigen solltest, weil die Basisklasse das nötige Interface bereits bereitstellt. Also sieh zu, dass du die Basisklasse so designst, dass du mit ihrem Interface auskommst.
In C# ist das so implementiert, weil Java es so macht und sies da abgekupfert haben. In Java gibt es das so, weil viele Programmierer das Konzept der Objektorientierung nur so halb verstanden haben und sowas dauernd brauchten, und weil für die zuständigen Manager der Markt entschied was gut war. Darum gibts auch die ganzen Sprachinkonsistenzen um java.lang.String, zum Beispiel. Außerdem - in Java wird sowieso alles dynamisch zur Laufzeit gemacht, von daher - wenn man da ein paar mehr potentielle Fehlerquellen einbaut, die man zur Compilezeit so gut wie garnicht abfangen kann, macht es so den großen Unterschied auch nicht mehr. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 30.06.2007 um 19:12 Uhr von 0xdeadbeef editiert. |