概述:System.Object類是.NET Framework類庫中所有類的基類
構造函數:
public Object()
說明:通過子類的構造函數來調用,但是也能直接使用它來生產Object對象。
方法:
public virtual bool Equals(Object obj)
判斷對象obj是否與當前對象相對。
此方法是一個virtual方法,一般在子類中應該重寫該方法。
該方法根據對象的類型不同,分爲以下幾種情況:
1:如果對象是簡單值類型,比如原生數據類型,則相等的定義爲:類型相同且值相等。
2:對於結構類型,相等意味着結構內部的字段的值要相等。注意:對於結構,相等性判斷是判斷結構內的字段是否相等。
3:對於引用類型,該方法判斷兩個對象是否是同一個對象,實際上就是在方法內部調用了ReferenceEqual方法,因此,對於引用類型的相等性判斷,一般應該在子類中重寫該方法。
下表中給出了幾種類型會默認調用的Equals方法
類型 | 默認調用的Equals方法 | 說明 |
Object類的子類 | Object.Equals(Object) | 比較引用 |
Structure | ValueType.Equals | 比較字段的值 |
Enumeration | Enum.Equals | |
Delegate | MulticastDelegate.Equals | |
Interface | Object.Equals(Object) |
對於Equals(Object)方法來說,下列語句必須爲true。(下例中的引用類型x,y和z均不爲null)
x.Equals(x) == true(例外,x爲浮點數)
x.Equals(y) == y.Equals(x)
若干x和y都是NaN,則x.Equals(y) == true
如果(x.Equals(y) && y.Equals(z)) == true,則x.Equals(z) == true
只有x和y指向的對象沒有改名,x.Equals(y)的值必須一直相同。
x.Equals(null) == false
注意:Equals方法不能拋異常。
實現IComparable接口的類型必須重寫Equals方法;
重寫Equals方法的類型必須也重寫GetHashCode方法;否則hash表可能無法正常工作。
如果重載了“==”運算符,也必須重新Equals方法。
如果對引用類型使用“==”運算符,默認爲比較引用的地址是否相同,即是否指向同一個對象。
public static bool Equals(Object objA, Object objB)
判斷兩個對象是否相等。
如果objA和objB指向同一個對象,或兩者都爲null,返回true;
如果兩者裏面一個爲null,另一個不是,返回false;
如果兩個對象都不爲null,且不是指向同一個對象,該方法會自動調用objA.Equals(objB)方法。
protected virtual void Finalize()
在該對象被垃圾回收器回收前執行特定的釋放資源和清理工作。
public virtual int GetHashCode()
hashcode是一個數字,一般用於在對象進行相等性判斷是來標識對象,也可用於在集合中作爲對象的索引。
默認的GetHashCode方法並不保證能爲所有的對象生成唯一的Hash值。
public Type GetType()
返回當前實例的類型信息,如:Int32,String,Person等。
protected Object MemberwiseClone()
創建一個當前對象的淺表副本。
此方法會創建一個新的對象,並將源對象中的非靜態字段的值複製到新對象中,但要注意的是,如果字段是引用類型,此方法只會複製引用,也就是說,兩個對象中的該引用字段會指向同一個對象。
public static bool ReferenceEquals(Object objA, Object objB)
判斷兩個引用是否指向同一個對象;特別的,如果兩個引用均爲null,結果也爲true。
另外,如果參數是值類型,基於自動裝箱的原因,結果總是爲false。
public virtual string ToString()
返回一個字符串,默認返回當前對象的類型信息。一般會在子類中重寫。