是否同一个事实对象,让Equals说了算
假如,有这样的一个需求,有一个病人实例和一个居民实例,只要名字相同,就说他们是同一个人,操作应该对等。你怎样判断呢?
public class People
{
private string nameField = "";
public string Name
{
get { return nameField; }
set { nameField = value; }
}
}
public class Person : People { }
public class Patient : People { }
Person p1 = new Person();
Patient p2 = new Patient();
p2.Name=p1.Name = "Wang wy";
在面向对象中这一代码,p1 == p2肯定是不可行的;有人说判断p1.Name==p2.Name,J这个就不是面向对象了。
C#面向对象的做法是Equals,等等,现在用Equals仍然是结果是false。我们要在基类People的定义上override
bool Equals(object obj);
int GetHashCode();
代码:
public override bool Equals(object obj)
{
People s = obj as People;
if (s == null) return false;
return string.Compare(this.Name, s.Name, true) == 0;
}
public override int GetHashCode()
{
return nameField.GetHashCode();
}
好了完成了测试一下
static void Main(string[] args)
{
Person p1 = new Person();
Patient p2 = new Patient();
p2.Name=p1.Name = "Wang wy";
Console.WriteLine(p1.Equals(p2));
Console.ReadKey();
}