เรากำลังสร้างอินสแตนซ์ของคลาส 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