Ich würde nur in einem Fall casten:
...
In allen anderen Fällen würde ich assen
Das entspricht eigentlich auch meiner Vorgehensweise. Ich prüfe alles stets zuerst, somit weiß ich womit ich arbeite. Wozu dann also as wenn ich die Klasse kenne.
Wobei wenn ich mir jetzt mein Beispiel angucke, dann ist es evtl. nicht glücklich gewählt. Ich hab mich zu stark von - zwei gleiche Aktionen, zwei Vorgehensweisen - einnehmen lassen. Durch den Zugriff auf die Vorgängerklasse gibt man die Kontrolle aus der Hand. Nun ja, wenn man TBitmap rein stopft, sollte eigentlich auch TBitmap raus kommen. Aber ok, man bekommt etwas von einer anderen Funktion geliefert. In diesem besonderen Fall ist der Fall eigentlich klar. Schlechtes Beispiel.
Mal sehen, vielleicht finde ich bessere Beispiele.
Da ist deine Einstellung genau falschrum, in Bezug auf deine Fehlererwartung.
Also ich weiß nicht ob meine Einstellung falsch ist, vielleicht haben wir nur unterschiedliche Vorstellungen von den Ausgangsvoraussetzungen. Ok, das Beispiel ist vielleicht nicht glücklich gewählt, aber was bringt dem Nutzer meines Programms eine schöne Fehlermeldung. Besser ist es gar nicht erst so weit kommen zu lassen, wenn es geht.
Aber wie bereits gesagt, denn Unterschied kenne ich. Nur gehe ich bei solchen Beispielen wie oben zuerst davon aus, dass es schon seine Richtigkeit hat.