刚刚看了一下c#中“==”与“Equals”的区别,自己略加实验(假设Person是自己写的一个类):
Person p1=new Person();
Person p2=new Person();
Console.WriteLine(p1==p2);
Console.WriteLine(p1.Equals(p2));
得出的结果是:false false但随后,我无意中随便用了一个类来实验,就是用了 ContextStaticAttribute(.net中的类)
ContextStaticAttribute c1 = new ContextStaticAttribute();
ContextStaticAttribute c2 = new ContextStaticAttribute();
Console.WriteLine(c1 == c2);
Console.WriteLine(c1.Equals(c2));
却发现,得出来的结果是: false true按我的了解,“==”是比较变量自身的值是否相同,而“Equals”是比较变量引用的对象是否相同,很多文章的例子都如本话题中的Person来证明。但,ContextStaticAttribute到底又是什么,c1==c2为false表明c1和c2是指向不同的地址,但c1.Equals(c2)为true却又表示c1和c2所引用的对象是相同的,那么这就是说:同一个对象被放在了不同的地址的内存中???请高手解析下,ContextStaticAttribute的怪异之处。谢谢

解决方案 »

  1.   

    ==和Equals都可以重载...以适应对象的需要...
      

  2.   

    参考用 ContextStaticAttribute 标记的静态字段不在上下文之间共享。如果在不同的上下文中访问指示的静态字段,则该字段将包含不同的值。按原样使用此属性,而不要从其派生。
      

  3.   

    按我的了解,“==”是比较变量自身的值是否相同,而“Equals”是比较变量引用的对象是否相同
    ------------
    你的了解是误解...去看看MSDN,有详细的解释...
      

  4.   


    ContextStaticAttribute 是继承自Attribute类 在Attribute类中Equals 被重写了
      

  5.   

    ,“==”是比较变量自身的值是否相同,而“Equals”是比较变量引用的对象是否相同误解
      

  6.   

    对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false。对于string 以外的引用类型,如果两个对象引用同一个对象,则 == 返回 true。对于 string 类型,== 比较字符串的值。
        ==操作比较的是两个变量的值是否相等。
        equals()方法比较的是两个对象的内容是否一致.equals也就是比较引用类型是否是对同一个对象的引用。
    参考