Как отмечали другие, отличия возникают только в том случае, если метод Equals
переопределяется, поскольку базовая реализация в object
основана на ReferenceEquals
.
Рассмотрим следующий пример:
public class Person {
public string Firstname { get; set; }
public string Lastname { get; set; }
public DateTime Birthdate { get; set; }
public override bool Equals(object other) {
var otherPerson = other as Person;
if (otherPerson == null) {
return false;
}
return Firstname == otherPerson.Firstname
&& Lastname == otherPerson.Lastname
&& Birthdate == otherPerson.Birthdate;
}
}
Теперь мы создаем два человека с таким же именем и Дата рождения. Согласно нашей переопределенной логике Equals
, эти два человека считаются одним и тем же Лицом. Но для Системы это два разных объекта, потому что они были созданы дважды, и поэтому ссылки не равны.
var person1 = new Person(Firstname = "John", Lastname = "Doe", Birthdate = new DateTime(1973, 01, 04));
var person2 = new Person(Firstname = "John", Lastname = "Doe", Birthdate = new DateTime(1973, 01, 04));
bool isSameContent = person1.Equals(person2); // true
bool isSameObject = person1.ReferenceEquals(person2); // false
var person3 = person1;
bool isSameObject2 = person1.ReferenceEquals(person3); // true
является главной Равно методы? что может иметь значение – slawekwin
Вы пытались прочитать [this] (https://msdn.microsoft.com/en-us/library/system.object.referenceequals (v = vs.110) .aspx) и [this] (https://msdn.microsoft.com/en-us/library/w4hkze5k(v=vs.110).aspx)? –
Или просто посмотрите на источник, чтобы увидеть разницу: http://referencesource.microsoft.com/#mscorlib/system/object.cs,d9262ceecc1719ab –