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.  对象的克隆(浅拷贝和深拷贝)

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

  • 相关阅读:
    第六次学习笔记
    第四篇笔记
    第三篇学习笔记
    第二篇学习笔记
    第一篇学习笔记
    px与dp、sp之间的转换
    SQLite的使用(二):数据增删改查
    Logcat的级别以及Logcat的调试使用
    Android 创建服务(一)
    简说SQLite
  • 原文地址:https://www.cnblogs.com/renjie/p/1408183.html
Copyright © 2011-2022 走看看