程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [C# 基礎知識系列]C#中易混淆的知識點

[C# 基礎知識系列]C#中易混淆的知識點

編輯:C#入門知識

一、引言

 今天在論壇中看到一位朋友提出這樣的一個問題,問題大致(問題的鏈接為:http://social.msdn.microsoft.com/Forums/zh-CN/52e6c11f-ad28-4633-a434-fc4d09f4d23d )是這樣的:

    Main( m1 = m2 = ==

大家先不要去Visual Studio中運行這段代碼,先猜猜此段代碼的運行結果是怎樣的,如果你猜測的結果和運行出來的結果完全是一致並且你也知道原因的話,那這篇文章下面的內容就沒必要看下去了,如果你對運行出來的結果表示不理解的話,那請繼續看下面內容的分析,相信看完你絕對可以解除你的疑惑。

二、==與Equals的區別

上面問題的運行結果為:

對於結果為什麼是這樣的呢?這主要涉及到==與Equals方法的區別的,再講兩者的區別前,大家首先要明確——C#中有兩種不同的相等:引用相等和值相等。值相等意味著兩個對象保護相同的值,例如,兩個值為1的整數就具有值相等性;引用相等意味著要比較的不是兩個對象,而是兩個對象的引用,且兩者引用的是同一個對象。若要檢查引用相等性,應使用 ReferenceEquals。若要檢查值相等性,請使用 Equals(詳細內容可以參考:http://msdn.microsoft.com/zh-cn/library/ms173147(v=vs.90).aspx )。下面就看看它們直接的區別:

  • ==比較的是棧內的內容,對於值類型而言,”==“比較的就是兩個對象的值,除字符串(字符串類型是一個特殊情況)以外的引用類型比較的就是兩個引用類型在棧內的地址
  • Equals方法是定義在Object中的虛方法,用來比較兩者引用對象的值是否相等,.NET中類型就都可以重寫Equals方法,例如,在.NET中string類型就重寫了Equals方法,用於比較兩個字符串的值是否相等,而不是字符串引用是否相等。

有了上面的理論基礎,下面就具體分析上面程序為什麼會是那樣的結果:

View Code

運行結果為:

 

三、typeof與GetType區別

 從上面那個問題中,我又聯系到了typeof與GetType的區別,所以這裡就一起總結下,首先我還是由一個程序來引出它們的區別:

             Main( m1 =  m2 =             // ValueType是引用類型,因為它是類,所以返回為false
            Console.WriteLine(

要想弄明白上面的運行結果,首先我們應該理解typeof與GetType的區別(之前我認為兩個的都是一樣的,這是一個誤區),具體的區別為:

  • typeof  是運算符,而 GetType() 是方法
  • typeof 獲得的System.Type對象,GetType()獲得的Type,
  • GetType()是基類System.Object的方法,只有建立了一個實例之後才能夠被調用
  • typeof的參數只能是int, string, class,自定義類型,不能為

 

四、小結

 這篇文章主要是記錄下自己在回答問題時所學到的內容,也希望對有同樣疑惑的朋友有所幫助。

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