System.Object類

概述: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)比較引用
StructureValueType.Equals比較字段的值
EnumerationEnum.Equals
DelegateMulticastDelegate.Equals
InterfaceObject.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()

返回一個字符串,默認返回當前對象的類型信息。一般會在子類中重寫。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章