zoukankan      html  css  js  c++  java
  • 9.了解四个相等判断的用法

    Object.ReferenceEquals(Object left,Object right) :判断两个对象的ID是否相同。

    Object .Equals(Object left,Object right):当不知道两个对象的类型时判断这两个对象是否相同,它是原理是基于“==”和第一个对象的Equals()。

    实例的Equals(Object right)方法:

       原则是不管什么时候,在创建一个值类型时重载Equals()方法,并且你不想让引用类型遵从默认引用类型 的
        语义时也重载Equals(),就像System.Object定义的那样 。当你写你 自己的Equals() 时,遵从要点里实现的内
        容。重载Equals()就意味着你应该重写GetHashCode()

      标准模式:

     public class Foo
        {
         public override bool Equals( object right )
         {
          // check null:
          // the this pointer is never null in C# methods.
          if (right == null)
           return false;

          if (object.ReferenceEquals( this, right ))
           return true;

          // Discussed below.
          if (this.GetType() != right.GetType())
           return false;

         // Compare this type's contents here:
            return CompareFooMembers(
             this, right as Foo );
          }
         }

    另一种方法是派生类的Equals中都调用基类的Equals.

    给了你 4 种方法来检测相等性,但你只须要考虑为其中两个提供你 自己的方法。你决不应该重载静态 的 
       Object.ReferenceEquals()和静态 的Object.Equals(),因为它们提供了正确的检测,忽略运行时类型 。你应该
       为了更好的性能而总是为值类型实例提供重载的Equals()方法和操作符==() 。当你希望引用类型 的相等与对
       象ID 的相等不同时,你应该重载引用类型实例 的Equals()

  • 相关阅读:
    C#线程类Thread初步
    无限级分类存储过程版
    C#多线程编程实例实战
    数据库里阻塞和死锁情况 看那里死锁的存储过程
    预防按钮的多次点击 恶意刷新
    .net2.0文件压缩/解压缩
    HttpHandler和HttpModule入门
    反射,枚举,绑定下拉框
    在C#里关于定时器类
    判断上传的图片文件格式是否合法不是用后缀做的判断
  • 原文地址:https://www.cnblogs.com/movemoon/p/2735643.html
Copyright © 2011-2022 走看看