CSharp – Static Polymorphism – Operator Overloading

Polymorphism is a Greek word that means “many-shaped”
Overloaded operators are functions with special names the keyword ‘operator’ followed by the symbol for the operator being defined.

Syntax:

...
public static Box operator+ (Box b, Box c)
....

Notice: ‘operator+’ keyword

Example:


using System;

namespace ConsoleApplication1
{

    class Box
    {
        private double length;      // Length of a box
        private double breadth;     // Breadth of a box
        private double height;      // Height of a box

        public double getVolume()
        {
            return length * breadth * height;
        }
        public void setLength(double len)
        {
            length = len;
        }

        public void setBreadth(double bre)
        {
            breadth = bre;
        }

        public void setHeight(double hei)
        {
            height = hei;
        }
        // Overload + operator to add two Box objects.
        public static Box operator +(Box b, Box c)
        {
            Box box = new Box();
            box.length = b.length + c.length;
            box.breadth = b.breadth + c.breadth;
            box.height = b.height + c.height;
            return box;
        }

    }

    class Tester
    {
        static void Main(string[] args)
        {
            Box Box1 = new Box();         // Declare Box1 of type Box
            Box Box2 = new Box();         // Declare Box2 of type Box
            Box Box3 = new Box();         // Declare Box3 of type Box
            double volume = 0.0;          // Store the volume of a box here

            // box 1 specification
            Box1.setLength(6.0);
            Box1.setBreadth(7.0);
            Box1.setHeight(5.0);

            // box 2 specification
            Box2.setLength(12.0);
            Box2.setBreadth(13.0);
            Box2.setHeight(10.0);

            // volume of box 1
            volume = Box1.getVolume();
            Console.WriteLine("Volume of Box1 : {0}", volume);

            // volume of box 2
            volume = Box2.getVolume();
            Console.WriteLine("Volume of Box2 : {0}", volume);

            // Add two object as follows:
            Box3 = Box1 + Box2;

            // volume of box 3
            volume = Box3.getVolume();
            Console.WriteLine("Volume of Box3 : {0}", volume);
            Console.ReadKey();
        }
    }

}

The result is:

Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400

For italian people: come funziona?

1. Viene eseguita prima Main()
2. Box Box1 = new Box(); -> dichiaro le variabili come appartenenti al tipo classe ‘Box’
3. Box1.setLength(6.0); -> invio alla classe ‘Box’ funzione ‘setLenght’ il valore 6.0 -> che viene assegnato a ‘length’
4. Idem come sopra per tutte le specifiche di Box1′ e ‘Box2’
5. public static Box operator +(Box b, Box c) … return box; -> Overload dell’operatore, vengono computati separatamente Box1′ e ‘Box2’
6. volume = Box1.getVolume(); -> avvia dalla classe ‘Box’ la funzione ‘getVolume()’ e calcola il volume

Se togliamo le righe…


      // Overload + operator to add two Box objects.
      public static Box operator+ (Box b, Box c)
      {
         Box box = new Box();
         box.length = b.length + c.length;
         box.breadth = b.breadth + c.breadth;
         box.height = b.height + c.height;
         return box;
      }

verrà restituito un errore di compilazione.