zoukankan      html  css  js  c++  java
  • 是否同一个事实对象,让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();
    }

  • 相关阅读:
    Linux下对拍(A+B问题)
    洛谷 P1043 数字游戏 区间DP
    6.22 集训--DP复习一
    洛谷 P1220 关路灯 区间DP
    A*算法求K短路模板 POJ 2449
    点分治模板 POJ 1741
    HDU
    棋子游戏 51Nod
    数论习题总结
    CodeForces
  • 原文地址:https://www.cnblogs.com/cgzwwy/p/1282432.html
Copyright © 2011-2022 走看看