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

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

  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. canvas绘制文本

    canvas绘制文本 属性和方法 font = value 设置字体 textAlign = value 设置字体对齐方式 start, end, left, right, center textBa ...

  2. Hadoop 2.7.3 安装配置及测试

    1.概述 Hadoop是一个由Apache基金会所开发的分布式系统基础架构.用户可以在不了解分布式底层细节的情况下,开发分布式程序.hadoop三种安装模式:单机模式,伪分布式,真正分布式.因在实际生 ...

  3. [Delphi] 设置线程区域语言防止乱码

    uses  Windows; 在工程文件中添加一句代码,如下: Application.Initialize; //添加以下一句解决外文系统乱码问题 SetThreadLocale(DWORD(Wor ...

  4. 用jquery操作字体颜色覆盖当前页面的css设置

    直接使用css操作color的时候,!important一直不生效,记录下,使用下面的可以起作用 用jquery操作字体颜色覆盖当前页面的css设置 $('a[href="?p=home&a ...

  5. ADO.Net学习总结

    一.讲述6个ADO.NET中的常用对象: Connection对象Command对象DataReader对象DataAdapter对象DataSet对象DataTable对象DataRow对象Data ...

  6. python 发送带附件的 邮件

    from email.MIMETextimportMIMETextfrom email.MIMEMultipartimportMIMEMultipartimport smtplib mail_host ...

  7. realproxy

    https://msdn.microsoft.com/zh-cn/library/dn574804.aspx

  8. LevelDB Version

    [LevelDB Version] Version 保存了当前磁盘以及内存中所有的文件信息,一般只有一个Version叫做"current" version(当前版本).Level ...

  9. Gtk-WARNING **: cannot open display: :0.0之解决

    当使用su 到另外一个用户运行某个程序,而这个程序又要有图形显示的时候,就有可能有下面提示: root@dt:~# sudo -i -u keji google-chrome No protocol ...

  10. win10如和设置远程桌面

    最近几天一直在搞远程桌面问题,电脑一直连不上远程,今天终于出来了. 前提前提  条件,要电脑允许Administrator用户,先把电脑切换到那个用户,然后进行下面操作. 1.在桌面,我的电脑图标,鼠 ...