Polymorphism in C#: Explained with Real-World Examples