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