zoukankan      html  css  js  c++  java
  • 通用对象操作

    1.       对象的等值性和唯一性

    Sytem .Object 提供的Equals的虚方法,就是提供判断两个对象是否是有着相同的“值“。

     e.g

    public virtual bool Equals(Object obj)

    {

               If(this==obj)

               return (true);

        return false;

    }

    重写了这个Equals方法

      class Car

        {

            //重写Equals方法

            public override bool Equals(object obj)

            {

                //判断this不能为null

                if (obj == null)

                    return false;

                //类型不样 也是不能相等的

                if (this.GetType() != obj.GetType())

                {

                    return false;

                }

                //前面已经判断这个对象是相等的  所以他们不会编译报错的

                Car car = (Car)obj;

                //对其引用类型字段比较

                if (!Object.Equals(this, car))

                {

                    return false;

                }

                return true;

                //return base.Equals(obj);

            }

    }

    2.  对象的唯一性识别 RefenceEquals();

    Equals方法是比较两个类型实例是否相等,如果相等的话就true

    而我们如果要将对两对象是否指向同一个引用,将用到RefenceEquals();

    static void Main(string[] args)

            {

                Car c = new Car();

                c.Id = 32;

                c.Name = "audo";

                Car c1 = new Car();

                c.Id = 32;

                c.Name = "audo";

                Console.WriteLine(Object.ReferenceEquals(c, c1));

            }

    //返回的“false

    说明了对象类型都相同,地址不同。

    3.  对象的散列码

    说实话,我对这个对象的散列码不是很熟悉,说是点都不同也不为过,不过学习了这个章,还是有好处的。

    FCL设计者认为对象的实例都是放入散列集合中的,所以有了Object中的GetHashCode()虚方法

    学到了前面的Equals方法时候,我突然的发现:我重载了Equals方法后,vs会给我报一个警告的提示“没有重写Objecet GetHashCode()“;我就感到很老火了,我重载了Equals方法关GetHashCode什么事情啊, 不过我重写了GetHashCode() 却没有警告提示;这是为什么呢?

    看了下面的章节,我恍然大悟:

    一个类型必须同时写入Equals()和GetHashCode();

    是因为System.Collections.Hashtable类型的实现要求两个相同的对象都要有相同的散列码,原来是这样的所,我明白了  原来的他们里面的判等和计算等算法是要通过GetHashCode()来保持以致啊!详情见P163 呵呵

    4.  对象的克隆(浅拷贝和深拷贝)

    参见博客中的“浅拷贝和深拷贝解析“……

  • 相关阅读:
    内网穿透(Frp)-拯救没有公网IP的你
    用Windows远程桌面连接树莓派的方法
    TensorFlow 1.9开始支持树莓派
    树莓派制作遥控小车-新手教程
    Layui 一个页面包含多个table时不展示分页条
    MVC 通过@符号把数据赋值给jQuery对象
    jQuery 批量为表单元素赋值
    layui分页组件,一直在调用方法的解决办法
    layui 表格复选框不居中解决办法
    JQuery 解决遮罩层下内容可以滚动问题
  • 原文地址:https://www.cnblogs.com/renjie/p/1408183.html
Copyright © 2011-2022 走看看