เรากำลังสร้างอินสแตนซ์ของคลาส Employee สองอินสแตนซ์ e และ e1 e ถูกกำหนด toe1 อ็อบเจ็กต์ทั้งสองชี้ไปที่การอ้างอิงเดียวกัน ดังนั้นเราจะได้เอาต์พุตที่คาดหวังจริงสำหรับ Equals ทั้งหมด
ในกรณีที่สอง เราสามารถสังเกตได้ว่า แม้ว่าค่าคุณสมบัติจะเหมือนกัน Equals คืนค่าเท็จ โดยพื้นฐานแล้ว เมื่ออาร์กิวเมนต์อ้างถึงอ็อบเจกต์ต่างๆ ค่าเท่ากันจะไม่ตรวจสอบค่าและคืนค่าเป็นเท็จเสมอ
ตัวอย่างที่ 1
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
ตัวอย่างที่ 2
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