Selbst statische Analysetools können dieses Problem nicht lösen. Was ist, wenn Ihr Code Reflection verwendet?
void Test(string typeName)
{
Type t = Type.GetType(typeName);
object obj = Activator.CreateInstance(t);
A a = (A)obj;
// etc.
}
Wird dies eine Ausnahme auslösen? Es gibt absolut keine Möglichkeit, die Antwort zu erfahren, ohne es tatsächlich auszuführen. Keine noch so gute Code-Pfad-Analyse wird einen Fehler aufdecken, der von der Wert eines bestimmten Parameters. Und wenn Sie Folgendes tun müssen laufen. den Code, um den Fehler zu erkennen, dann ist es ein Laufzeitfehler, nicht zur Kompilierzeit.
Dies ist genau der Grund, warum Sie Test Ihr Code. Compiler können nicht sicherstellen, dass Ihr Code richtig nur, dass er syntaktisch gültig ist und den Regeln der Grammatik folgt.
Und obwohl dies wie ein erfundenes Beispiel erscheinen mag, wird Reflection heutzutage so gut wie überall eingesetzt, von Ihrem O/R-Mapper bis zu Ihrem DI-Framework. In einer modernen Anwendung ist es eigentlich ziemlich üblich, den Typ einer Instanz nicht zu kennen, oder zumindest nicht den spezifische Betonart bis zur Laufzeit.