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

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

  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()的两个方法有着详细的介绍。

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

  

一起学习《C#高级编程》2--比较对象的相等性的更多相关文章

  1. Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程

    Shell高级编程视频教程-跟着老男孩一步步学习Shell高级编程实战视频教程 教程简介: 本教程共71节,主要介绍了shell的相关知识教程,如shell编程需要的基础知识储备.shell脚本概念介 ...

  2. (转)跟着老男孩一步步学习Shell高级编程实战

    原文:http://oldboy.blog.51cto.com/2561410/1264627/  跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...

  3. 跟着老男孩一步步学习Shell高级编程实战

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...

  4. 重学《C#高级编程》(对象与类型)

    昨天重看了下<C#高级编程>里面的对象与类型一章,发现自己有许多遗漏没懂的地方重新弄清楚明白了 先说说什么是对象吧,我个人的感觉是:在编程的世界里,一段程序就是一个事物的处理逻辑,而对象就 ...

  5. Java学习进阶—高级编程

    当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...

  6. python学习 面向对象高级编程

    ---恢复内容开始--- 面向对象编程---oop,是一种编程思想,oop把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数 ...

  7. 吴裕雄--天生自然 R语言开发学习:高级编程

    运行的条件是一元逻辑向量(TRUE或FALSE)并且不能有缺失(NA).else部分是可选的.如果 仅有一个语句,花括号也是可以省略的. 下面的代码片段是一个例子: plot(x, y) } else ...

  8. C#高级编程9-第3章 对象与类型

    类与结构 类和结构都是对象的模板 类定义了处理和访问数据的方法,通过类的实例化进行逻辑处理 类与结构的区别是类是引用类型,存储在托管堆上:结构是值类型,存储在栈上的: 类使用class进行修饰,结构使 ...

  9. IOS高级编程之一:多点触摸与手势验证

    前段时间学习了IOS基础的一些控件的使用作为基础,现在开始学习一些高级编程的东西,手势处理器.文件I/O.定位.网络通信.多线程这些,分享一些学习的重点,还是很实用的. 今天就先介绍个简单点得,手势处 ...

  10. MVC高级编程+C#高级编程

    本人今年的目标是学习MVC高级编程和C#高级编程,把自己的基础打的扎实,本文中值是一个开到,定期会在上面记录学习的技术点和心得就,加油吧!!!!!

随机推荐

  1. ubuntu 16.04安装Chrome离线crx插件包

    /opt/google/chrome/google-chrome --enable-easy-off-store-extension-install 打开浏览器后,输入chrome://extensi ...

  2. [POJ] Financial Management

    Financial Management Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 182193   Accepted: ...

  3. rhel6.3-64 yum问题

    问题如下:

  4. 【好文转帖】控制反转(IOC)和依赖注入(DI)的区别

    IOC   inversion of control  控制反转 DI   Dependency Injection  依赖注入 要理解这两个概念,首先要搞清楚以下几个问题: 参与者都有谁? 依赖:谁 ...

  5. Mathtype 公式显示方框

    公式编辑器mathtype中一些符号显示方框,如何解决呢?出现这个问题的原因是这是因为windows中的mtextra.ttf(显示为MT Extra (TrueType))字体文件不存在或版本太低, ...

  6. Filter的连接过程《转》

    原文地址:https://yq.aliyun.com/articles/48113 7.Filter的连接过程 DirectShow提供了多方法来连接Filter,如IFilterGraph::Con ...

  7. 2 数据库开发--MySQL下载(windows)

    Windows:(mysql) 操作: 0.下载安装mysql www.mysql.org downloads->进入社区community community 5.7.21 下载5.6 Mic ...

  8. update svn cache 慢

    eclipse 打开了一个工程,就进行了update svn cache,弄了2个多小时了还是在进行.观察这个过程在空文件夹上也进行了不少时间,我感觉到可能方法错了.试了下关闭SVN--> sv ...

  9. layer插件open方法回掉值问题

    最近做项目需用到一个弹出层加载iframe页面的东西,首先想到layer插件,此插件用到过多次,兼容性很好,功能也强大,废话不多说上代码. 其实功能很简单,就是在目标页面选择一个值,回掉回来,说明一下 ...

  10. [转] 移动平台Html5的viewport使用经验

    转自:http://blog.csdn.net/wuruixn/article/details/8591989 问题描述 web页面采用html5技术实现,在系统登录页面中使用frameset.fra ...