System.Object

Public虚函数

实例Equals函数:public virtual bool Equals(object obj);

1. object类的实现:比较两个引用是否指向同一个对象

2. 值类型和String类型重写了Equals方法:比较的是值类型的值是否相等。

3. 用户定义的类:可以重写Equals方法,重写了Equals方法的同时,最好重写GetHashCode函数

 

ToString函数:public virtual string ToString();

1. object类的实现:返回obj.GetType().FullName

2. 值类型(Struct除外)和String类型重写了ToString方法:将类型强制转换为String类型并返回

3. 用户定义的类:重写ToString函数,一般为了好debug

 

GetHashCode函数:public virtual int GetHashCode();

GetHashCode的重写规则:1. 如果两个对象的GetHashCode返回值相同,Equals必须返回true;2. 如果Equals返回true,两个对象的GetHashCode返回值尽量相同。(1,哈希表的key 2,同步块索引)

Public静态函数

静态Equals函数:public static bool Equals(object objA, object objB);

静态函数被重写,静态Equals函数在以下3中情况返回true;

1. 两个引用指向同一个对象

2. 两个null

3. 实例Equals返回true

 

静态ReferenceEquals函数:public static bool ReferenceEquals(object objA, object objB);

比较两个引用是否指向同一个对象;由于不能被重写,因此如果有一个是值类型,那么必然返回false

 

Object其他函数

GetType函数: public Type GetType();

返回类型对象,通过这个函数可以获得对象的类型元数据等。

 

MemberwiseClone函数: protected object MemberwiseClone();

浅复制,创建一个新对象,将旧对象的值类型直接拷贝到新对象中,将旧对象的引用类型的引用拷贝到新对象中。访问限制符是protect,用于实现Icloneable的Clone()函数。

 

Finalize函数: protected virtual void Finalize();

虚函数,而且是protected,在Object类中此函数没有实现部分。在子类中如果使用了非托管资源需要释放,需要重写Finalize函数,在函数实现中释放非托管资源,当然不是使用override重写,使用的是析构函数语法来实现重写,但是由于Finalize函数的执行时间不一定,由GC决定,因此常使用Dispose模式实现。重写Finalize函数为了保险。

 

==、实例Equals、ReferenceEquals、静态Equals

== 比较的是两个引用是否指向同一个对象;值类型和String都重载了==运算符,重载为比较的是值是否相等。

其他3个方法都已经写了。

posted @ 2012-09-09 22:47  alab  阅读(186)  评论(0编辑  收藏  举报