当使用值类型对象进行处理时,如果两者相等则Equals()方法返回true,否则返回false。如果处理的是引用类型对象,引用的对象相同则返回true,否则返回false。
1.虚方法重写
方法Equals()既可以是静态方法,也可以是虚方法,通过自定义类可以重写虚方法形式的Equals()。而方法ReferenceEquals()只有静态形式。
实例49:根据创建的对象输出显示两对象的比较结果
下面通将过一个实例来说明使用Equals()和ReferenceEquals()的具体流程。本实例保存在“光盘:\daima\10”文件夹内,项目名为xuwaychong。实例的功能是根据创建的对象输出显示两对象的比较结果。实例文件的主要代码如下所示:
上述实例代码的设计流程如下。
1)定义类mm,并在其中分别定义字段name和参数为name的方法。
2)分别定义类mm的实例对象mm1和mm2。
3)分别为实例对象mm1和mm2设置参数为“张三”。
4)分别调用Equals()和ReferenceEquals()进行比较处理。
5)通过WriteLine()输出比较处理的结果。
6)赋值对象mm1等于mm2。(www.xing528.com)
7)分别调用Equals()和ReferenceEquals()进行赋值后的比较处理。
8)通过WriteLine输出赋值后的比较处理的结果。
上述实例代码执行后,将分别调用比较方法输出对应的结果,如图10-9所示。
图10-9 实例执行结果
从图10-9的所示结果可以看出,虽然类mm的对象mm1和mm2的参数都是“张三”,但是两者依旧不是同一个对象。只有使用“mm1=mm2”进行赋值处理后,两者才完全相同。
2.方法重写
当自定义一个类后,即使没有指定基类也会隐式的把System.object作为基类。所以在具体声明时,并不需要明确地将System.object指定为基类。在自定义的类中,可以对System.object内的所有方法重写,Finalize()和MemberwiseClone()除外。
注意
1)如果要实现Equals()或GetHashCode()的重写,必须对这两个方法全部重写,否则在编译时会出现错误信息提示。
2)GetHashCode()产生的散列值不是唯一的。
3)在GetHashCode()种不能出现异常。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。