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

一同學習《C#初級編程》2--比擬對象的相等性

編輯:C#入門知識

一同學習《C#初級編程》2--比擬對象的相等性。本站提示廣大學習愛好者:(一同學習《C#初級編程》2--比擬對象的相等性)文章只能為提供參考,不一定能成為您想要的結果。以下是一同學習《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()的兩個辦法有著詳細的引見。

 

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

  

參考頁面:

http://www.yuanjiaocheng.net/CSharp/csharp-linq.html

http://www.yuanjiaocheng.net/CSharp/csharp-func.html

http://www.yuanjiaocheng.net/CSharp/csharp-action.html

http://www.yuanjiaocheng.net/CSharp/csharp-Predicate-delegate.html

http://www.yuanjiaocheng.net/CSharp/csharp-extension-method.html

it學習材料

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