刚刚看了一下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的怪异之处。谢谢
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的怪异之处。谢谢
------------
你的了解是误解...去看看MSDN,有详细的解释...
ContextStaticAttribute 是继承自Attribute类 在Attribute类中Equals 被重写了
==操作比较的是两个变量的值是否相等。
equals()方法比较的是两个对象的内容是否一致.equals也就是比较引用类型是否是对同一个对象的引用。
参考