概述: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()
返回一个字符串,默认返回当前对象的类型信息。一般会在子类中重写。