In einem einfachen Beispiel wie dem Ihren könnte man meinen, dass es für einen Compiler ein Leichtes wäre, intelligent nach allen Verweisen auf ein bestimmtes Objekt zu suchen und dann festzustellen, ob es illegal gecastet wurde. Aber betrachten Sie dieses Gegenbeispiel:
public class A { }
public class B { }
static void Main(string[] args)
{
B b = new B();
object obj = (object)b;
// re-using the obj reference
obj = new A();
A a = (A)obj; // cast is now valid
Es gibt so viele mögliche Permutationen von Möglichkeiten, wie man eine bestimmte Basisreferenz wiederverwenden und umwandeln kann, dass ein Compiler-Autor dies voraussehen müsste. Noch komplizierter wird es, wenn die obj-Referenz in einem Parameter an eine Methode übergeben wird. Die Überprüfung zur Kompilierzeit wird nicht-deterministisch, was die Kompilierungszeiten potenziell viel länger macht und immer noch nicht garantiert, dass alle ungültigen Casts abgefangen werden können.