如果你的类中定义了一个引用类型,而这个引用类型要用于Equals的操作或者==的操作的话请重载运算符==和!=,同时类本身也要重载==和!=  BTW,System.Object 类中没有Equals 的静态方法!(1.1 Framework、VS2003)

解决方案 »

  1.   

    A sample :public class A
    {
      B b;
      ........
    }
    public class B
    {
      .........
    }A a=new A();
    A aa=new A()如果你想比较a和aa是否相等则A必须重载==和!=操作符,如果a和aa比较条件中包含有a.b==aa.b的比较,则必须在B中也重载==和!=操作符
      

  2.   

    不会产生递归吧,在Object的静态方法Equal中,不会调用MyRefType的Equal方法,他会利用反射机制去进行比较,具体的我忘了:)
      

  3.   

    感谢大家的回答,请参见 6.1.2 节
    这里
    http://www.china-pub.com/computers/subject/huodong/qhnet/qinghua_net.html
    有样章下载
    BTW:
    TO:qimini(循序渐进) 
    你说的那个我不是很懂,在书中,两个操作符的重载均调用了 Equals 方法To:lishiliang(阿世) 
    你那个是值类型 的Equals 的默认实现,书中也有介绍
      

  4.   

    BTW:
    To: qimini(循序渐进)
    在 VS2003 的文档中有这两个方法的声明,如下:
    {
    确定指定的 Object 是否等于当前的 Object。受 .NET Framework 精简版的支持。[Visual Basic] Overloads Public Overridable Function Equals(Object) As Boolean
    [C#] public virtual bool Equals(object);
    [C++] public: virtual bool Equals(Object*);
    [JScript] public function Equals(Object) : Boolean;
    确定指定的 Object 实例是否被视为相等。[Visual Basic] Overloads Public Shared Function Equals(Object, Object) As Boolean
    [C#] public static bool Equals(object, object);
    [C++] public: static bool Equals(Object*, Object*);
    [JScript] public static function Equals(Object, Object) : Boolean;
    }
      

  5.   

    类的静态成员不能被重载,所以绝对没有产生递归的可能Object.Equals方法的定义===========================public virtual bool Equals(object);public static bool Equals(object, object);
      

  6.   

    顺便更正一下
    System.Object是有Equals这个静态方法的,前面没有看到 :)
      

  7.   

    谢谢  qimini(循序渐进) , 我看了生成的 IL, 基本搞清楚了, 多谢.