Мы делаем это для полиморфизма во время выполнения. Когда нам нужно вызвать метод производного класса, но какой производный класс необходимо вызвать, зависит от времени выполнения на основе пользовательского ввода. Это очень простой пример:
static void Main(string[] args)
{
List<Shape> shapes = new List<Shape>();
shapes.Add(new Circle());
shapes.Add(new Square());
shapes.Add(new Rectangle());
foreach (Shape s in shapes)
s.Draw();
Console.Read();
}
public class Shape
{
public virtual void Draw() { }
}
public class Square : Shape
{
public override void Draw()
{
// Code to draw square
Console.WriteLine("Drawing a square");
}
}
public class Circle : Shape
{
public override void Draw()
{
// Code to draw circle
Console.WriteLine("Drawing a circle");
}
}
public class Rectangle : Shape
{
public override void Draw()
{
// Code to draw circle
Console.WriteLine("Drawing a rectangle");
}
}
*****Output:
Drawing a circle
Drawing a square
Drawing a rectangle*****
В практическом сценарии пользователь может определить во время выполнения, какую фигуру он хочет нарисовать. Таким образом, при реализации вы должны создать объект класса Shape и назначить ему Circle, Rectangle или Square в зависимости от выбора пользователя (переключателем или if-else). И когда вы вызываете Shape.Draw (), он вызывает соответствующий метод производного класса.