In this article we will try to understand how to overload operator == for our convenience.

Operator == is one of the most commonly used operators in .Net programming.

Just take an example.

Example 1

public static void Main()

{

string MyText = "SukeshMarla";

string YouText = Console.ReadLine();

if(MyText == YouText)

{

Console.WriteLine("Success");

}

else

{

Console.WriteLine("Fail");

}

}

It seems pretty cool as the actual output and the output we are expecting will be the same.

Example 2

1. Create a class called student as follows:

public class Stundet

{

public int RollNo

{

get;

set;

}

public string Name

{

get;

set;

}

}


2.

public static void Main()

{

Stundet objStudent1 = new Stundet();

objStudent1.Name = "Sukesh Marla";

objStudent1.RollNo = 1;

Stundet objStudent2 = new Stundet();

objStudent2.RollNo = 2;

objStudent2.Name = "Dipal Shah";

Stundet objStudent1Again = new Stundet();

objStudent1Again.RollNo = 1;

objStudent1Again.Name = "Sukesh Marla";

Console.WriteLine("Comparision");

Console.WriteLine("objStudent1==objStudent2: " + (objStudent1 == objStudent2));

Console.WriteLine("objStudent1==objStudent1Again: " + (objStudent1 == objStudent1Again));

Console.ReadKey();

}

Let's have a look at the output:

OverOpe1.jpg

What!!!! It finds that objStudent1 is not equal to objStudent2 but why is objStudent1 not equal to objStudent1Again?

Reason for not getting the expected result

It happened because == returns true if two operands refer to the same object, which in our case they are not.

Solution

In C# we can overload some of the operators by using static functions and the operator keyword.

Solution

Let's look at the code to do that.

Create a new function inside the Student class as follows:

public static bool operator ==(Stundet FirstObject, Stundet SecondObject)

{

// Both are null or both points to same instance means both are equal

if(System.Object.ReferenceEquals(FirstObject, SecondObject))

{

return true;

}

//one of them is not null means they are not equal

if(((object)FirstObject == null) || ((object)SecondObject == null))

{

return false;

}

return (FirstObject.RollNo==SecondObject.RollNo);

}


Now press F5.

We get the compile error:

The operator == requires a matching operator '!=' to also be defined

So define one more method as:

public static bool operator !=(Stundet FirstObject, Stundet SecondObject)

{

return !(FirstObject == SecondObject);

}



Now press F5 and the result wil be:

OverOpe2.jpg

That's it, we got what is required.

Hope you enjoyed the article.