#350 – Method Modifiers Required for Polymorphic Behavior

There are three combinations of method modifiers that make sense, in determining whether methods in a class are virtual or non-virtual.

Typical combinations of modifiers for base class / derived class (assuming that method signature is the same in both the base and derived class):

  • (no modifier) / new – Both methods are non-virtual, derived class method hides the base class method
  • virtual / override – Both methods are virtual, support polymorphic behavior
  • virtual / new – Base class method virtual, derived class method non-virtual, derived class method hides base class method

There are two other combinations that are allowed, but result in a compiler warning indicating that you should use new in the derived class to be explicit:

  • (no modifier) / (no modifier) – effectively (no modifier) / new
  • virtual / (no modifier) – effectively virtual / new