今天在論壇中看到一位朋友提出這樣的一個問題,問題大致(問題的鏈接為:http://social.msdn.microsoft.com/Forums/zh-CN/52e6c11f-ad28-4633-a434-fc4d09f4d23d )是這樣的:
Main( m1 = m2 = ==
大家先不要去Visual Studio中運行這段代碼,先猜猜此段代碼的運行結果是怎樣的,如果你猜測的結果和運行出來的結果完全是一致並且你也知道原因的話,那這篇文章下面的內容就沒必要看下去了,如果你對運行出來的結果表示不理解的話,那請繼續看下面內容的分析,相信看完你絕對可以解除你的疑惑。
上面問題的運行結果為:
對於結果為什麼是這樣的呢?這主要涉及到==與Equals方法的區別的,再講兩者的區別前,大家首先要明確——C#中有兩種不同的相等:引用相等和值相等。值相等意味著兩個對象保護相同的值,例如,兩個值為1的整數就具有值相等性;引用相等意味著要比較的不是兩個對象,而是兩個對象的引用,且兩者引用的是同一個對象。若要檢查引用相等性,應使用 ReferenceEquals。若要檢查值相等性,請使用 Equals(詳細內容可以參考:http://msdn.microsoft.com/zh-cn/library/ms173147(v=vs.90).aspx )。下面就看看它們直接的區別:
有了上面的理論基礎,下面就具體分析上面程序為什麼會是那樣的結果:
View Code運行結果為:
從上面那個問題中,我又聯系到了typeof與GetType的區別,所以這裡就一起總結下,首先我還是由一個程序來引出它們的區別:
Main( m1 = m2 = // ValueType是引用類型,因為它是類,所以返回為false Console.WriteLine(
要想弄明白上面的運行結果,首先我們應該理解typeof與GetType的區別(之前我認為兩個的都是一樣的,這是一個誤區),具體的區別為:
這篇文章主要是記錄下自己在回答問題時所學到的內容,也希望對有同樣疑惑的朋友有所幫助。