TClass(instance) => static_cast<>()
instance as TClass => dynamic_cast<>()
Beim ersten findet keine Typprüfung statt, schlägt somit auch nie fehl (static cast halt). Zweiteres macht eine Typprüfung und wirft eine
Exception wenn der Typ nicht stimmt (Enthält somit eine IS Prüfung).
In C++ ist der as und is Operator in dem dynamic_cast<>() zusammen gefasst. Eine reine Typprüfung mit boolschen Ergebnis führt der IS Operator durch (wäre bei C++ die Überprüfung auf NULL nach dem dynamic_cast<>()). Der AS Operator führt eine Typprüfung durch und bei Erfolg den Cast. Bei Nichterfolg wirft er eine entsprechende
Exception (im Gegensatz zum dynamic_cast<>() welcher still NULL zurück gibt).