About
In this code snippet, we will take a look at operator overloading in C#.
Just like methods, operators can be overloaded too. In the code below we have an example with geometric shapes. If we use the + operator on two objects of GeomentricShapes we get an error. This happens because the compiler doesn’t know what is supposed to happen when the + operator is used on a GeomentricShapes object. We have to overload the + operator and write the code to be executed when two GeomentricShapes objects are added together.
Let’s look at the code example below to see how to overload operators.
Code:
using System;
namespace OperatorOverloading
{
    class Program
    {
        static void Main(string[] args)
        {         
            Square square1 = new Square(15, 20);
            Square square2 = new Square(33, 8);
            Console.WriteLine("Square 1 Area: " + square1.Area);
            Console.WriteLine("Square 1 Circumference: " + square1.Circumference);
            Console.WriteLine("");
            Console.WriteLine("Square 2 Area: " + square2.Area);
            Console.WriteLine("Square 2 Circumference: " + square2.Circumference);
            Console.WriteLine("");
            Console.WriteLine("");
            GeometricShapes geoShape = square1 + square2;
            Console.WriteLine("Total Area 1: " + geoShape.Area);
            Console.WriteLine("Total Circumference 1: " + geoShape.Circumference);
            Console.WriteLine("");
            GeometricShapes geoShape2 = square1 - square2;
            Console.WriteLine("Total Area 2: " + geoShape2.Area);
            Console.WriteLine("Total Circumference 2: " + geoShape2.Circumference);
            Console.WriteLine("");
            Console.ReadLine();
        }
    }
    class GeometricShapes
    {
        public double Area { get; set; }
        public double Circumference { get; set; }
        public GeometricShapes()
        {
        }
        public GeometricShapes(double area, double circumference)
        {
            this.Area = area;
            this.Circumference = circumference;
        }
        //Operator overloading.
        public static GeometricShapes operator +(GeometricShapes shape1, GeometricShapes shape2)
        {
            //Here we define what happens when the + operator will be used on a GeometricShapes instance. 
            return new GeometricShapes((shape1.Area + shape2.Area), (shape1.Circumference + shape2.Circumference));
        }
        public static GeometricShapes operator -(GeometricShapes shape1, GeometricShapes shape2)
        {
            //Here we define what happens when the - operator will be used on a GeometricShapes instance. 
            return new GeometricShapes(Math.Abs(shape1.Area - shape2.Area), Math.Abs(shape1.Circumference - shape2.Circumference));
        }
    }
    class Square : GeometricShapes
    {
        public double SideA { get; set; }
        public double SideB { get; set; }
        public Square(double sideA, double sideB)
        {
            this.SideA = sideA;
            this.SideB = SideB;
            this.Area = sideA * sideB;
            this.Circumference = (sideA * 2) + (sideB * 2);
        }
    }
}								 
 
			 
								




