В этом случае нет абсолютно никакой разницы в производительности.
Поскольку StartEngine не является виртуальным, компилятор, а затем и джиттер точно знают, что подразумевается под обращением к нему, будь то в базовом, производном классе или из внешнего класса.
Если бы StartEngine был виртуальным, и компилятор и / или джиттер могут сделать вывод, что вы вызываете относительно CityBus, а не что-то, полученное из CityBus, то какая (очень маленькая) разница может также будет удален в качестве оптимизации.
Если StartEngine был виртуальным, и компилятор и / или дрожание не могут определить, звоните ли вы в отношении CityBus, а не в производный класс, тогда различие между базовым или прямым вызовом жизненно важно для правильности.
Как правило, единственное место для вызова базового метода с base.
- это переопределение этого метода, чтобы сделать использование более понятным. Если различие между базовой и производной версией важно в другом месте, вам следует попытаться провести рефакторинг так, чтобы base.SomeVirtualMethod()
вызывал base.SomeNonVirtual()
, что, следовательно, всегда доступно, даже когда derived.SomeVirtualMethod()
меняет поведение.