• 一起学习《C#高级编程》2--比较对象的相等性


      今后争取每两天能更新一次。平日的诱惑太多,双休只顾玩了,进度有点慢。

      接上一讲的,类型的安全性,留下了点小尾巴——比较对象的相等性。

      C#有四种比较相等的方式:除了“==”运算符外,System.Object定义了3中方法:ReferenceEqual()方法和两种Equals();

      1.首先是“==”运算符:

      对于值类型,“==”比较两个值是否相等;而对于引用类型,“==”则是比较两个对象的引用地址是否相同。这里有个特例,就是string字符串类型,“==”是比较字符串的值而不是引用地址,这是因为系统重写了“==“运算符。关于运算符的重载,后面一讲会说。

      2.ReferenceEqual()方法

      ReferenceEqual()是静态方法,用于比较两个对象是否引用类的同一个实例,即引用自同一个内存中的地址。作为静态方法,不能被重写。如果两个引用 引用自同一个对象实例,则返回true,否则返回false。

      

    SomeClass s1 = new SomeClass();
    SomeClass s2 = new SomeClass();
    SomeClass s3 = s1;
    bool b1 = ReferenceEquals(null, null);
    bool b2 = ReferenceEquals(s1, s2);
    Console.WriteLine(b1);    //true
    Console.WriteLine(b2);    //false,创建了不同实例,引用地址不同
    Console.WriteLine(ReferenceEquals(s1, s3));    //true,s1,32引用地址相同
    Console.WriteLine(ReferenceEquals(1, 1));    //flse,因为不是比较数值,而是比较引用地址

    注意点:

    因为ReferenceEquals()是比较引用类型的,当执行值类型间比较时,会采取装箱(上一讲提到)操作,把值类型转换为引用类型,所以会返回false。

    bool b=ReferenceEquals(1,1);   会返回false值

     

    3.虚拟的Equal()方法: Equals(Object)

    说明:确定指定的 Object 是否等于当前的 Object

    因为是虚拟的方法,可以被重写。类似于“==”运算符,支持比较值类型和引用类型,其中string被当作值类型比较

     

    4.静态的Equals()方法: Equals(Object,Object)

    说明:确定指定的对象实例是否被视为相等。

     

    关于Equals方法,书中也仅仅是简单介绍了下,详细解答可以参考MSDN文档:http://msdn.microsoft.com/zh-cn/library/System.Object.Equals(v=vs.100).aspx,上面对Equals()的两个方法有着详细的介绍。

     

    下一篇讲,运算符的重载。

      

  • 相关阅读:
    如何提高英阅读英文技术资料
    如何阅读英语文章
    vijosP1223麦森数
    vijosP1359 Superprime
    vijosP1319 数列
    vijosP1447 开关灯泡
    vijosP1164 曹冲养猪
    vijosP1016 北京2008的挂钟
    洛谷P1457 城堡(The Castle)
    洛谷P1294 高手去散步
  • 原文地址:https://www.cnblogs.com/xukan/p/4176994.html
Copyright © 2020-2023  润新知