I was looking at this question and I was wondering whether every abstract function should be considered to be a virtual function in C# or in general?
I was a bit puzzled by the "you must override/you may override" responses to that question. Not being a C# programmer, I tend to think that abstract functions are a compile-time concept only, and that abstract functions are virtual functions by definition since you must provide at least one but can provide multiple implementations further down the hierarchy. Virtual functions have a compile-time dimension too, in that you cannot override a non-virtual function, but is mostly a runtime concept since it is "just" the selection of the correct method implementation based on the actual receiver.