Tuesday 29 January 2013

Operator Overloading in C Sharp


For Asp.net Training with C# Click Here

Written By:-Isha Malhotra
Email:-malhotra.isha3388@gmail.com

Operator Overloading
Before understanding the operator overloading we need to understand why we use operator overloading. In the following example we have one class calculator which contains two variable x and y. and one web form where we create two variables in its cs file and add them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int p = 10;
        int q = 20;
        int r = p + q;
    }
}
 In this operation we didn’t get any problem but if we try to add two objects we will get error like this:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Calculator cal1 = new Calculator();
        cal1.x = 10;
        cal1.y = 20;

        Calculator cal2 = new Calculator();
        cal2.x = 15;
        cal2.y = 25;

        //we will get error that we cannot use + operator of type Calculator(which is ref type)
        Calculator cal = cal1 + cal2;
    }
}



In this situation we have to give the new definition to the + operator so that we can perform this operation. This can be done by operator overloading.
To overload the operator we have to use the operator keyword and declared the static method like this:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Calculator
/// </summary>
public class Calculator
{
    public int x;
    public int y;

    public static Calculator operator +(Calculator cal1, Calculator cal2)
    {

        Calculator cal = new Calculator();
        cal.x = cal1.x + cal2.x;
        cal.y = cal1.y + cal2.y;
        return cal;
       
   
    }
}

After overloading the + operator we can perform the following operation:-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Calculator cal1 = new Calculator();
        cal1.x = 10;
        cal1.y = 20;

        Calculator cal2 = new Calculator();
        cal2.x = 15;
        cal2.y = 25;

    
        Calculator cal = cal1 + cal2;
        Response.Write(cal.x);
        Response.Write(cal.y);
    }
}

This is the example of binary operator overloading.
Overloading of Unary operator:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Calculator
/// </summary>
public class Calculator
{
    public int x;
    public int y;

    //binary opertor overloading where we pass 2 parameter
    public static Calculator operator +(Calculator cal1, Calculator cal2)
    {

        Calculator cal = new Calculator();
        cal.x = cal1.x + cal2.x;
        cal.y = cal1.y + cal2.y;
        return cal;
       
   
    }

    //unary operator overloading
    public static Calculator operator ++(Calculator cal1)
    {

        Calculator cal = new Calculator();
        cal.x = cal1.x++;
        cal.y = cal1.y++;
        return cal;


    }


}
Similarly we can operate (--) operator.


Operator overloading of object(ref type) and Value type:-
Suppose you want to add int value in object. Then we perform the following overloading:-
public static Calculator operator +(Calculator cal1, int x)
    {

        Calculator cal = new Calculator();
        cal.x = cal1.x + x;
        cal.y = cal1.y + x;
        return cal;


    }
Calling of this operator overloading:-
Calculator cal1 = new Calculator();
        cal1.x = 10;
        cal1.y = 20;

Calculator calwithVar = cal1 + 3;


Overloading of Comparison operator like(==, !==)

If you want to comparison operator like == then we must have to overload its complementary operator which is !=.
For example:-
public static bool operator ==(Calculator cal1, Calculator cal2)
    {

        if ((cal1.x == cal2.x) && (cal1.y == cal2.y))
        {

            return true;

        }
        else
        {

            return false;
       
        }



    }
    public static bool operator !=(Calculator cal1, Calculator cal2)
    {

        if ((cal1.x != cal2.x) || (cal1.y != cal2.y))
        {

            return true;

        }
        else
        {

            return false;

        }



    }

Calling of this operator overloading:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Calculator cal1 = new Calculator();
        cal1.x = 10;
        cal1.y = 20;

        Calculator cal2 = new Calculator();
        cal2.x = 15;
        cal2.y = 25;

    
       if (cal1 == cal2)
        {

            Response.Write("both are equal");

        }
        else
        {


            Response.Write("both are not equal");
        }
    }
}

In this way we can overload the operators.

No comments:

Post a Comment