迷惑的C#中的Object.Equals静态方法

简介:
原文发表于 2008-07-30 23:06:34 在我的网易博客,后被我删掉(主要是想把网易博客上的技术相关的文章都搬过来) 
      最近一直在看<Pro c# with .NET 3.0, Special Edition>,第三章3.18.5节中讲述了System.Object的静态成员的Equals方法和ReferenceEquals方法,按照这本书的说法,Object.Equals(Object1,Object2)是用来比较两个对象(属于同一类型)的状态是否相同.下面是其举例: 
    Person person3=new Person("Fred","Jones","222-22-2222",98); 
    //Person 类有4个属性:fName(String),lName(String),SSN(String),age(byte) 
    Person person4=new Person("Fred","Jones","222-22-2222",98); 
    按照其说法,person3和person4有相同的状态,因此,object.Equals(person3,person4)的返回值应该是True,然而,我在Visual studio 2005中编译后得到的结果却是:False.真是叫人很吃惊.后来我在网上查了一下object.Equals方法,一篇文章这样写: 
    用反编译工具反编译System.dll得到方法的实现源码: 
    public static bool Equals(object objA, object objB) 
    { 
          if (objA == objB) 
         { return true; } 
         if ((objA != null) && (objB != null)) 
         { return objA.Equals(objB); } 
        return false; 
     } 

    可以看到,两个对象是否Equals,就要看其用等号判断的值是否相等.而等号判断两个对象是否相等是看他们两个对象是否有相同的引用(是否指向的是内存中的同一个对象的位置).虽然两个对象状态相同,但是,并没有指向内存中相同区域,不属于相同引用.因此返回值是False.



本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2011/05/25/2056150.html,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
C#
51.c#:string类的静态方法
51.c#:string类的静态方法
185 1
|
8月前
|
C#
c# 所有类的最终基类:Object
c# 所有类的最终基类:Object
69 0
C# 操作文件路径(Directory)的常用静态方法
C# 操作文件路径(Directory)的常用静态方法
C#数据类型(object)
C#数据类型(object)
218 0
|
缓存 算法 C#
【C#本质论 十】合式类型(一)重写Object成员及操作符重载(下)
【C#本质论 十】合式类型(一)重写Object成员及操作符重载(下)
105 0
|
缓存 算法 编译器
【C#本质论 十】合式类型(一)重写Object成员及操作符重载(上)
【C#本质论 十】合式类型(一)重写Object成员及操作符重载(上)
86 0
C#(二十一)之派生类中的构造函数 object类
今天看下派生类中的有参数和无参数的构造函数以及object类。
145 0
C#(二十一)之派生类中的构造函数 object类
|
安全 C#
一起谈.NET技术,关于c#静态方法和实例方法的辨析和应用
  本文将围绕c#静态方法和实例方法讨论一下。针对一些观点,如:"静态方法是常驻内存", 还有"静态方法比实例方法先装载",做一个辨析。同时讨论下何时用静态方法,何时用实例方法。   前几日,在微软的好友发给我一个链接:《静态方法和实例化方法之间的区别你知道了嘛? 欢迎讨论!! - 问题最终 ...》,然后说这里某些观点需要澄清一下,希望我写一篇blog。
1315 0
|
测试技术
Object C学习笔记10-静态方法和静态属性
  在.NET中我们静态使用的关键字static有着举足轻重的作用,static 方法可以不用实例化类实例就可以直接调用,static 属性也是如此。在Object C中也存在static关键字,今天的学习过程使用到了这个关键字,在这里记录一下static的使用。
1274 0