Déjà, on parle de choses qui seraient possibles uniquement avec modification du compilateur (pour rappel).
Si une telle évolution était possible, le compilateur devrait signaler une erreur à la compilation dans le cas où des des return renvoient des types différents. Ca me parait simple comme règle.
Après, par rapport à ton nouvel exemple. Il est clair pour moi que les types que tu tentes de renvoyer sont différents.
Si tu désirerais "typer le var" en IC par exemple, suffit d'utiliser le casting comme on le fait depuis toujours :
1 2 3 4 5 6 7
| public var Method(bool aOrB)
{
if(aOrB)
return (IC)new A();
else
return (IC)new B();
} |
A aucun moment, tu tentes de renvoyer un IC dans ton exemple, le compilateur n'a aucune raison de tenter une résolution de conflit.
Et si on suit toujours ton raisonnement, pourquoi le code suivant compile et s'exécute correctement avec le framework 3.5 ?
var monObjetAnonyme = new { InstanceA = new A(), InstanceB = new B(), InstanceAIC = (IC)new A() };
Partager