Я рассматривал вопрос о переполнении стека В чем разница между абстрактной функцией и виртуальной функцией?, и мне было интересно, следует ли рассматривать каждую абстрактную функцию как виртуальная функция в С# или вообще?
Я был немного озадачен "вы должны переопределить/вы можете переопределить" ответы на этот вопрос. Не будучи программистом на С#, я склонен думать, что абстрактные функции - это только концепция времени компиляции, и что абстрактные функции являются виртуальными функциями по определению, поскольку вы должны предоставить хотя бы одно, но можете предоставить несколько реализаций дальше по иерархии.
У виртуальных функций также есть измерение времени компиляции, поскольку вы не можете переопределить не виртуальную функцию, но они в основном представляют собой концепцию времени выполнения, поскольку это "просто" выбор правильной реализации метода на основе фактического получателя.