System.object类,为所有.net类的基类,它实现了4个公共实例方法:ToString,Equals,GetHashCode,GetType.
1、Equals体现了对象的同一性(identity),而不是相等性(equality)。它的实现方法为:
1 public class Object() 2 { 3 public virtual Boolean Equals() 4 { 5 if(this==obj)return true; 6 return false; 7 8 } 9 }
但是,这种实现方法效率是极低的,它需要比较其定义的任何字段。为了解决这个问题,
Object提供了一个静态方法ReferenceEquals,原型为:
public class Object() { public static boolean ReferenceEquals(Object obja,Object objb) { return(obj A==obj B); } }
因此在检查同一性(即两个引用是否指向同个对象时),一定要调用这个ReferenceEquals,而不是调用Equals或者== 操作符
2 System.Object的GetHashCode方法用于获得哈希值,它能获取任何对象的Int32哈希码。如果重写了Equals,就必须重写GetHashCode.简单地说,就是在System.Collections.Hashtable,System.Collections.Dictionary中,任何对象都是通过哈希桶(bucket)来查找,需要查找一个键时,首先要获取指定的键对象的哈希码,然后和哈希桶中的值进行比较,从而查找键值。因此,需要修改一个哈希表中的键对象时,首先应该移除键/值对,修改键对象,然后再将新的键/值添加回哈希表。
internal sealed class point { private Int32 m_x,m_y; public override Int32 GetHashCode() { return m_x^m_y; } }