努力理解Equals()

Epi*_*ody 2 .net c# equals

据我所知,Equals()确定指定的对象是否等于当前对象.

所以如果我有这个Player类:

public class Player
{
    int score;

    public object Clone()
    {
        return this.MemberwiseClone(); 
    }

    public void SetScore(int i)
    {
        this.score = i; 
    }

    public int GetScore()
    {
        return this.score; 
    }
}
Run Code Online (Sandbox Code Playgroud)

Ant然后我像这样实例化两个玩家:

Player p1 = new Player();
p1.SetScore(7);
Player p2 = (Player)p1.Clone(); 
Run Code Online (Sandbox Code Playgroud)

为什么Equals()在使用时会返回false:

Console.WriteLine(p1.Equals(p2)); // prints "False" to console
Run Code Online (Sandbox Code Playgroud)

他们怎么不平等?

Jon*_*art 10

因为除非您重写Equals函数,否则它会比较引用以查看它们是否是同一个对象.

请参阅实现等于方法.

在某些情况下,您可能会获得一些参考,并希望查看它是否是某个对象.说:

Player myFavorite = new Player();
//do stuff...
Player fastest = GetFastestPlayer();
if (myFavorite == fastest)
    // I'm happy
Run Code Online (Sandbox Code Playgroud)

  • @EpicNobody:它实际上是在`System.Object`上实现`.Equals()`的唯一明智的方法,因为该类不知道从它继承的类. (4认同)