首页 > 代码库 > 区别和认识C#中四个判等函数

区别和认识C#中四个判等函数

概要

  本方介绍.net如何判断两个对象是否相等

 

.Net有四个判等函数  

  1)Object.ReferenceEquals

  2)Object.Equals  

  3)对象实例的Equals

  4)==操作

  这四个函数之间有细微的关系,改变其中一个函数的实现会影响到其他函数的操作结果。

 

Object.ReferenceEquals静态方法

  首先要说的是Object.ReferenceEqualsObject.Equals这两个静态函数,对于它们俩来说,是不需要进行重写的,因为它们已经完成它们所要得做的操作。

  对于Object.ReferenceEquals这个静态函数,函数形势如下:  

public static bool ReferenceEquals( object left, object right );

 

  这个函数就是判断两个引用类型对象是否指向同一个地址。有此说明后,就确定了它的使用范围,即只能对于引用类型操作。那么对于任何值类型数据操作,即使是与自身的判别,都会返回false。这主要因为在调用此函数的时候,值类型数据要进行装箱操作,分别装箱

int n = 10;
Object.ReferenceEquals( n, n );

这是因为对于n这个数据装箱两次,而每次装箱后的地址有不同,而造成Object.ReferenceEquals( n, n )的结果永远为false

 

 

Object.Equals静态方法

  方法内部完成的工作:

public static void Equals( object left, object right )
{
     // Check object identity
    if( left == right )
        return true;
 
    // both null references handled above
     if( ( left == null ) || ( right == null ) )
        return false;
 
        return left.Equals( right );
}

  也就是说,Object.Equals()判等需要3个步骤。

  第1步:对象所属类型的==操作符执行结果;

  第2 步:对象是否空引用(同第1步一样,使用对象所属类型的==操作符判断);

  第3步:对象所属类型的Equals()方法;

  因此,类型是否实现了自身的Equals()成为Object.Equals()返回什么结果的重要因素。

 

等价规则

  等价的意义就是自反、对称、传递。

  1)所谓自反,即:a==a;

  2)所谓对称:即:a==b; 则:b==a;

  3)所谓传递:即:a==b; b==c; 则: a==c;

  理解了等价的意义,那么实现判等函数就要满足等价规则。

 

Equlas()可以重载的对象实例方法

 

 

参考:

  http://blog.csdn.net/zhoufoxcn/article/details/1326904

区别和认识C#中四个判等函数