Il n'y a absolument aucune différence de performance dans ce cas.
Comme StartEngine n'est pas virtuel, le compilateur, et plus tard le jitter, savent exactement ce que signifie un appel à celui-ci, que ce soit dans la classe de base, la classe dérivée ou depuis une classe extérieure.
Si StartEngine était virtuel, et si le compilateur et/ou le jitter peuvent déduire que vous appelez par rapport à un CityBus plutôt que quelque chose de dérivé d'un CityBus, alors quelle (très petite) différence il y a pourrait être également supprimée à titre d'optimisation.
Si StartEngine était virtuel, et que le compilateur et/ou le jitter ne peuvent pas déduire si vous appelez par rapport à un CityBus plutôt qu'à une classe dérivée, alors la distinction entre un appel de base ou direct est vitale pour la correction.
En règle générale, le seul endroit où l'on peut appeler une méthode de base avec base.
est dans une surcharge de cette méthode, pour rendre l'utilisation plus claire. Si la distinction entre la version de base et la version dérivée est importante ailleurs, alors vous devriez essayer de refactorer de manière à ce que base.SomeVirtualMethod()
les appels en base.SomeNonVirtual()
qui est donc toujours disponible même lorsque derived.SomeVirtualMethod()
modifie le comportement.