Polymorphism and Operator Overloading in C#