程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 一起學習《C#高級編程》2--比較對象的相等性,

一起學習《C#高級編程》2--比較對象的相等性,

編輯:C#入門知識

一起學習《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()的兩個方法有著詳細的介紹。

 

下一篇講,運算符的重載。

  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved