一起学习《C#高级编程》2--比较对象的相等性_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 一起学习《C#高级编程》2--比较对象的相等性

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

 2014/12/21 23:25:00  90kankan  程序员俱乐部  我要评论(0)
  • 摘要:今后争取每两天能更新一次。平日的诱惑太多,双休只顾玩了,进度有点慢。接上一讲的,类型的安全性,留下了点小尾巴——比较对象的相等性。C#有四种比较相等的方式:除了“==”运算符外,System.Object定义了3中方法:ReferenceEqual()方法和两种Equals();1.首先是“==”运算符:对于值类型,“==”比较两个值是否相等;而对于引用类型,“==&rdquo
  • 标签:C# 一起 学习 编程

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

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

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

 

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

  

上一篇: 距离单位与内外边距 下一篇: 控件布局
发表评论
用户名: 匿名