代码改变世界

每天学习一点.net(1) 4个共有的实例方法

2013-05-29 22:30  黑眼圈Mars  阅读(216)  评论(0编辑  收藏  举报

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;
    }   
}