SIGN UP MEMBER LOGIN:    
ARTICLE

Overloading in C#

Posted by Praveen Kumar Articles | Visual C# December 01, 2009
In this article I will explain you about overloading in C#.
Reader Level:
Download Files:
 

This article has been excerpted from book "The Complete Visual C# Programmer's Guide from the Authors of C# Corner".

C# allows user-defined types to overload operators by defining static member functions using the operator keyword. The operator keyword is used to declare an operator in a class or struct declaration. Not all operators can be overloaded, and some that can be overloaded have certain restrictions, as listed in Table 5.7.

table5.7.gif

Listing 5.54 illustrates overloading on complex numbers.

Listing 5.54: Operator Overloading Example


// Operator overloading your custom classes in C#
// OperatorOverloading Complex Numbers


using
System;

public
class Complex
{
    public int real = 0;
    public int imaginary = 0;
    public Complex(int real, int imaginary)
    {
        this.real = real;
        this.imaginary = imaginary;
    }

    public static Complex operator +(Complex c1, Complex c2)
    {
        return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
    }

    public static void Main()
    {
        Complex num1 = new Complex(2, 3);
        Complex num2 = new Complex(3, 4);
        Complex sum = num1 + num2;
        Console.WriteLine("Real: {0}", sum.real);
        Console.WriteLine("Imaginary: {0}", sum.imaginary);
        Console.ReadLine();
    }
}


Figure 5.14 shows the resulting display.

Figure5.14.gif

Figure 5.14: Screen Output Generated from Listing 5.54

Listing 5.55 presents a more sophisticated example of operator overloading.

Listing 5.55: Sophisticated Operator Overloading Example


// Operator overloading

using
System;

class
Rectangle
{
    private int iHeight;
    private int iWidth;
    public Rectangle()
    {
        Height = 0;
        Width = 0;
    }

    public Rectangle(int w, int h)
    {
        Width = w;
        Height = h;
    }

    public int Width
    {
        get
        {
            return iWidth;
        }

        set
        {
            iWidth = value;
        }
    }

    public int Height
    {
        get
        {
            return iHeight;
        }

        set
        {
            iHeight = value;
        }
    }

    public int Area
    {
        get
        {
            return Height * Width;
        }
    }

    /* Overloading == */
    public static bool operator ==(Rectangle a, Rectangle b)
    {
        return ((a.Height == b.Height) && (a.Width == b.Width));
    }

    /* Overloading != */
    public static bool operator !=(Rectangle a, Rectangle b)
    {
        return !(a == b);
    }

    /* Overloading > */
    public static bool operator >(Rectangle a, Rectangle b)
    {
        return a.Area > b.Area;
    }

    /* Overloading < */
    public static bool operator <(Rectangle a, Rectangle b)
    {
        return !(a > b);
    }

    /* Overloading >= */
    public static bool operator >=(Rectangle a, Rectangle b)
    {
        return (a > b) || (a == b);
    }

    /* Overloading <= */
    public static bool operator <=(Rectangle a, Rectangle b)
    {
        return (a < b) || (a == b);
    }

    public override bool Equals(object o)
    {
        return this.Equals(o);
    }

    public override int GetHashCode()
    {
        return this.GetHashCode();
    }

    public override String ToString()
    {
        return "Height=" + Height + ",Width=" + Width;
    }

    public static void Main()
    {
        Rectangle objRect1 = new Rectangle();
        Rectangle objRect2 = new Rectangle();
        Rectangle objRect3 = new Rectangle(10, 15);
        objRect1.Height = 15;
        objRect1.Width = 10;
        objRect2.Height = 25;
        objRect2.Width = 10;
        Console.WriteLine("Rectangle#1 " + objRect1);
        Console.WriteLine("Rectangle#2 " + objRect2);
        Console.WriteLine("Rectangle#3 " + objRect3);

        if (objRect1 == objRect2)
        {
            Console.WriteLine("Rectangle1 & Rectangle2 are Equal.");
        }
        else
        {
            if (objRect1 > objRect2)
            {
                Console.WriteLine("Rectangle1 is greater than Rectangle2");
            }
            else
            {
                Console.WriteLine("Rectangle1 is lesser than Rectangle2");
            }
        }
        if (objRect1 == objRect3)
        {
            Console.WriteLine("Rectangle1 & Rectangle3 are Equal.");
        }
        else
        {
            Console.WriteLine("Rectangle1 & Rectangle3 are not Equal.");
        }
        Console.ReadLine();
    }
}


Figure 5.15 contains the screen output from this example.

Figure5.15.gif

Figure 5.15: Screen Output Generated from Listing 5.55

Conclusion


Hope this article would have helped you in understanding Overloading in C#. See other articles on the website on .NET and C#.

visual C-sharp.jpg The Complete Visual C# Programmer's Guide covers most of the major components that make up C# and the .net environment. The book is geared toward the intermediate programmer, but contains enough material to satisfy the advanced developer.

Login to add your contents and source code to this article
share this article :
post comment
 
Team Foundation Server Hosting
Become a Sponsor
PREMIUM SPONSORS
  • Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites - Click Here!
    Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites - Click Here!
6 Months Free & No Setup Fees ASP.NET Hosting!
Become a Sponsor