Généralement, l'appel à ((A)a).method()
sera (encore un peu) plus rapide, car le compilateur JIT connaît (statiquement) la méthode concrète qui devrait être appelée, et peut donc appeler directement A.method
. L'appel à travers l'interface I
nécessite une vérification de l'exécution sur le type réel de l'objet vers lequel pointe la référence, puis l'envoi à cette implémentation. Je n'ai pas de références pour ça, cependant.
Je sais que le compilateur JIT Java a obtenu quelques optimisations à cet égard, comme chaque appel de méthode est virtuel - il devine & caches la mise en œuvre la plus utilisée d'une méthode d'interface particulière et optimise pour ce cas. Le .NET JIT n'en a pas autant besoin, car les méthodes doivent être explicitement virtuelles.
Ceci est beaucoup un cas de micro-optimisation que vous ne devriez vraiment pas vous inquiéter.
Cela a du sens, merci. – aumanets