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();
    }

  • 相关阅读:
    GLUT Tutorials 9: GLUT子菜单
    GLUT Tutorials 8: GLUT菜单
    GLUT Tutorials 9: GLUT鼠标
    GLUT Tutorials 8: GLUT高级键盘控制
    GLUT Tutorials 7: GLUT高级键盘控制
    GLUT Tutorials 6: GLUT场景漫游
    gif 录制小工具
    GLUT Tutorials 5: GLUT键盘控制
    java 传址或传值
    java中如何将byte[]里面的数据转换成16进制字符串
  • 原文地址:https://www.cnblogs.com/cgzwwy/p/1282432.html
Copyright © 2011-2022 走看看