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个方法都已经写了。