Chúng tôi đang tạo hai phiên bản của lớp Nhân viên, e và e1. Các e được giao toe1. Cả hai đối tượng đều trỏ đến cùng một tham chiếu, do đó chúng ta sẽ nhận được đầu ra đúng như dự kiến cho tất cả các Equals.
Trong trường hợp thứ hai, chúng ta có thể quan sát thấy rằng, mặc dù các giá trị thuộc tính giống nhau nhưng các giá trị thuộc tính vẫn trả về false. Về cơ bản, khi các đối số tham chiếu đến các đối tượng khác nhau. Các lệnh gọi không kiểm tra các giá trị và luôn trả về false.
Ví dụ 1
Chương trình lớpclass 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; } }
Đầu ra
True False
Ví dụ 2
Chương trình lớpclass 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(); } }
Đầu ra
True True