概述: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()

返回一个字符串,默认返回当前对象的类型信息。一般会在子类中重写。