আমরা Employee ক্লাসের দুটি ইনস্ট্যান্স তৈরি করছি, e এবং e1। e কে e1-এ অ্যাসাইন করা হয়েছে। দুটি অবজেক্ট একই রেফারেন্সকে পয়েন্ট করছে, তাই সকল Equals-এর জন্য true আউটপুট আশা অনুযায়ী मिलবে।
দ্বিতীয় কেসে আমরা দেখতে পাচ্ছি যে, প্রোপার্টি ভ্যালুগুলো একই থাকলেও Equals false রিটার্ন করে। মূলত, যখন আর্গুমেন্টগুলো আলাদা অবজেক্টকে রেফার করে। Equals ভ্যালু চেক করে না এবং সবসময় false রিটার্ন করে।
উদাহরণ ১
class Program
{
static void Main(string[] args)
{
Employee e = new Employee();
e.Name = "Test";
e.Age = 27;
Employee e2 = new Employee();
e2 = e;
var valueEqual = e.Equals(e2);
Console.WriteLine(valueEqual);
// 2nd Case
Employee e1 = new Employee();
e1.Name = "Test";
e1.Age = 27;
var valueEqual1 = e.Equals(e1);
Console.WriteLine(valueEqual1);
Console.ReadLine();
}
}
class Employee
{
public int Age { get; set; }
public string Name { get; set; }
}
আউটপুট
True False
উদাহরণ ২ (Equals ওভাররাইড করে)
class Program
{
static void Main(string[] args)
{
Employee e = new Employee();
e.Name = "Test";
e.Age = 27;
Employee e2 = new Employee();
e2 = e;
var valueEqual = e.Equals(e2);
Console.WriteLine(valueEqual);
Employee e1 = new Employee();
e1.Name = "Test";
e1.Age = 27;
var valueEqual1 = e.Equals(e1);
Console.WriteLine(valueEqual1);
Console.ReadLine();
}
}
class Employee
{
public int Age { get; set; }
public string Name { get; set; }
public override bool Equals(object? obj)
{
if (obj == null) return false;
if (this.GetType() != obj.GetType()) return false;
Employee p = (Employee)obj;
return (this.Age == p.Age) && (this.Name == p.Name);
}
public override int GetHashCode()
{
return Age.GetHashCode() ^ Name.GetHashCode();
}
}
আউটপুট
True True