Оптимизировать пустые вызовы методов в C#
У меня есть абстрактный класс, который должен стать основой огромной иерархии классов. Среди прочего, у него есть определенный абстрактный метод. Во время выполнения он будет постоянно вызываться для всех объектов этого класса системой, которая знает только об этом абстрактном классе, а не о его дочерних элементах:
foreach( AbstractClass object in allTheObjects )
object.DoStuff();
Тем не менее, многие из его дочерних элементов на самом деле не переопределяют этот метод (который пуст в базовом классе); те, которые его используют, и те, которые не распределены по иерархии классов. Будет ли C# заботиться об этом пустом методе, или мне придется каким-то образом его оптимизировать?
PS: я знаю, что преждевременная оптимизация - это зло, но она просто заинтересовала меня.
2 ответа
Я бы не беспокоился об этом. В C# вызовы методов действительно дешевы. И даже если бы вы это оптимизмизировали, я сомневаюсь, что вы увидите какую-то разницу. Смотрите этот пост для справки.
Я бы больше беспокоился о том, сможете ли вы избежать циклического прохождения всего, или какой структуры данных allTheObjects
является. Я бы сказал, что там гораздо больше возможностей для оптимизации.
Также вы можете подумать, действительно ли вам нужна большая структура наследования или вы можете достичь своих целей с помощью композиции или интерфейсов.
Вы также найдете больше информации здесь (методы интерфейса против делегатов против обычных вызовов методов)
Тем не менее, многие его дети на самом деле будут иметь этот метод пустым
Может быть, вам нужно объявить этот метод виртуальным, а не абстрактным? Таким образом, вы можете предоставить пустую реализацию по умолчанию.