Let us understand what virtual in layman term means. It means "not physically existing". Now lets assume one of the scenario, if we have a function say Add(int firstNumber, int secondNumber);
it is present both in parent class as well as child class. Now the rules in inheritance says if we create an instance of Child class, it has access to all public data members/functions in Child class as well as parent class. Now if we compile this code in VS, then we will get a warning to use New key word in Child class Add() method definition. This is the concept of method hiding. However, if suppose we remove the implementation of Add method in child class then it will call the Parent class method. That is why we should use Virtual keyword.
Again we have to bid with few of OOPs rules: if any method is virtual in parent class then in child class while implementing the same(which is not mandatory) should be marked as override.