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:
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:
That's it, we got what is required.
Hope you enjoyed the article.