一同學習《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學習材料