是否同一个事实对象,让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();
}

posted @ 2008-09-02 23:21  王伟晔  阅读(252)  评论(0编辑  收藏  举报