• 重写Object.Equals方法


        最*移动*台方面的竞争真是风云涌动,时时刻刻牵动着千万程序员的心,无论ms,苹果,google谁胜谁负都会影响着我们苦逼程序员对未来的规划。我只能默默的期盼ms给点力!不要让我在silverlight上花的功夫白费!废话不多说回归正题。

       今天重写Equals方法顺手做个总结,都说好记性不如烂笔头,让自己记忆深刻的同时也分享给大家。重写的时候有几点需要注意的地方先上一段代码,然后我再逐一解释。

    Class MyRefType:BaseType

    {

      RefTyoe refobj; //该字段是一个引用类型

      ValType valobj; //该字段是一个值类型

      public olverride Boolean Equals(Object obj)

      {

        if(obj==nulll)return false;

        if(this.GetType()!=obj.GetType())return false;

        //比较其中的引用类型字段

        MyRefType other=(MyRefTyppe)obj;

         //比较其中的值类型字段

        if(!Object.Equals(refobj,other.refobj)) return false;

        if(!valobj.Equals(other.valobj)) return false;

        return true;

      }

      

      public static Boolean operator==(MyRefType o1,MyRefType o2)

      {

        return Object.Equals(o1,o2);

      }

      public static Boolean operator!=(MyRefType o1,MyRefType o2)

      {

        return !(o1==o2);

      }

    }

    (代码是手敲的 可能有错误)

      1、比较引用类型的字段

      要比较引用类型的字段,我们应该调用Object的静态方法Equals方法,Object的静态Equals方法是一个比较两个应用类型的辅助方法。下面展示下Object的静态Equals方法的内部实现:

    public static Boolean Equals(Object objA,Object objB)

    {

      //如果objA和objB指向的是同一个对象

      if(objA==objB)return true;

      if(objA==null || objB==null) return false;

      return objA.Equals(objB);

    }

    所以我们采用这方式即使比较的两个字段出现值为null的情况也不影响代码的正常运行。如果refobj为null,调用refobj.Equalls(other.refobj)将会抛出NullReferenceException异常。Object的静态Equeals这一辅助方法会为我们对出现null的情况做检测。

      2.比较值类型的字段

      比较两个值类型的字段我们就应该用字段的Equalls方法来进行比较,因为值类型永远不可能为null,并且值类型调用Object.Equals静态辅助方法会对值类型对象执行一次装箱操作,损耗系统的性能。

  • 相关阅读:
    nodejs 异步转同步整理
    使用async-utility 转换异步请求为同步
    cube.js schemaVersion npm 包
    开发一个cube.js schemaVersion 包装
    cube.js 多租户参考设计说明
    cube.js 调度&&查询队参考参数
    cube.js 自定义首页显示信息
    cube.js data-blending一些说明
    cube.js 新版本的一些特性
    cube.js TimeoutError: ResourceRequest timed out 问题参考解决方法
  • 原文地址:https://www.cnblogs.com/allanxyq/p/2147730.html
Copyright © 2020-2023  润新知