System.Object类
概述:System.Object类是.NET Framework类库中所有类的基类
构造函数:
publicObject()
说明:通过子类的构造函数来调用,但是也能直接使用它来生产Object对象。
方法:
publicvirtualboolEquals(Objectobj)
判断对象obj是否与当前对象相对。
此方法是一个virtual方法,一般在子类中应该重写该方法。
该方法根据对象的类型不同,分为以下几种情况:
1:如果对象是简单值类型,比如原生数据类型,则相等的定义为:类型相同且值相等。
2:对于结构类型,相等意味着结构内部的字段的值要相等。注意:对于结构,相等性判断是判断结构内的字段是否相等。
3:对于引用类型,该方法判断两个对象是否是同一个对象,实际上就是在方法内部调用了ReferenceEqual方法,因此,对于引用类型的相等性判断,一般应该在子类中重写该方法。
下表中给出了几种类型会默认调用的Equals方法
类型默认调用的Equals方法说明Object类的子类Object.Equals(Object)比较引用StructureValueType.Equals比较字段的值EnumerationEnum.EqualsDelegateMulticastDelegate.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方法。
如果对引用类型使用“==”运算符,默认为比较引用的地址是否相同,即是否指向同一个对象。
publicstaticboolEquals(ObjectobjA,ObjectobjB)
判断两个对象是否相等。
如果objA和objB指向同一个对象,或两者都为null,返回true;
如果两者里面一个为null,另一个不是,返回false;
如果两个对象都不为null,且不是指向同一个对象,该方法会自动调用objA.Equals(objB)方法。
protectedvirtualvoidFinalize()
在该对象被垃圾回收器回收前执行特定的释放资源和清理工作。
publicvirtualintGetHashCode()
hashcode是一个数字,一般用于在对象进行相等性判断是来标识对象,也可用于在集合中作为对象的索引。
默认的GetHashCode方法并不保证能为所有的对象生成唯一的Hash值。
publicTypeGetType()
返回当前实例的类型信息,如:Int32,String,Person等。
protectedObjectMemberwiseClone()
创建一个当前对象的浅表副本。
此方法会创建一个新的对象,并将源对象中的非静态字段的值复制到新对象中,但要注意的是,如果字段是引用类型,此方法只会复制引用,也就是说,两个对象中的该引用字段会指向同一个对象。
publicstaticboolReferenceEquals(ObjectobjA,ObjectobjB)
判断两个引用是否指向同一个对象;特别的,如果两个引用均为null,结果也为true。
另外,如果参数是值类型,基于自动装箱的原因,结果总是为false。
publicvirtualstringToString()
返回一个字符串,默认返回当前对象的类型信息。一般会在子类中重写。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。