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

  • 相关阅读:
    Android-内存泄漏
    性能adb命令
    设置Nginx开机自启动
    【转 记录】python中的encode以及decode
    SVN 提交回滚
    Linux基础
    CentOS6.X关闭防火墙
    SCP用法
    Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置(转)
    (转,记录用)jQuery页面加载初始化的3种方法
  • 原文地址:https://www.cnblogs.com/cgzwwy/p/1282432.html
Copyright © 2011-2022 走看看