程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中的結構與類的總結(4)

C#中的結構與類的總結(4)

編輯:關於C語言

由於結構類型是值類型,因而Equals()方法比較的是兩個對象的值是否相等,如果相等則返回true;而類類型為引用類型,Equals()方法比較的是二者的引用地址(即指針)是否相等。很顯然,clsX和clsY是兩個不同的對象,它們在棧的地址是不相等的。如果修改代碼如下:

ClassPerson clsX = new ClassPerson();
clsX.LastName = "Bejaoui";
clsX.FirstName = "Bechir";
ClassPerson clsY = clsX;
if (clsX.Equals(clsY))
{
  Console.WriteLine("clsX = clsY");
}
else
{
  Console.WriteLine("clsX != clsY");

}//This code displays clsX = clsY

由於是直接將clsX賦值給clsY,因此兩個對象的引用地址相等,Equals()方法返回true。

其實對於值類型和引用類型的相等性比較,是一個比較復雜的問題。例如我們可以通過重寫Equals()方法增強或修改比較邏輯。重寫Equals()方法還必須重寫GetHashCode()方法。對於引用類型,還可以使用靜態方法ReferenceEquals()方法。此外,還可以重載操作符==。另外,對於String對象,則比較特殊,因為它使用了Immutable模式。雖然String類型是引用類型,但如果直接定義的兩個String對象的值相同,由於采用了Immutable模式的原因,這兩個對象其實是同一個對象,引用地址是相同的。因此不僅動態方法Equals()返回的是true,且靜態方法ReferenceEquals()返回的也是true。

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