После перегрузки оператора ==, как сравнивать, если две переменные указывают на один и тот же объект?
Перегрузка оператора сравнения, как сравнивать, если две переменные указывают на один и тот же объект (т.е. не на значение)
public static bool operator ==(Landscape a, Landscape b)
{
return a.Width == b.Width && a.Height == b.Height;
}
public static bool operator !=(Landscape a, Landscape b)
{
return !(a.Width == b.Width && a.Height == b.Height);
}
4 ответа
Используйте статический метод Object.ReferenceEquals.
Конечно, чтобы метод == и!= Сохранял их полную функциональность, вы также должны переопределить Equals и GetHashCode, чтобы они возвращали согласованный набор ответов вызывающим.
Чтобы проверить, оба ли указывают на один и тот же объект. Вы должны использовать метод Object.ReferenceEquals. Он вернет истину, если оба одинаковы или оба равны нулю. Иначе он вернет ложь
Я знаю, что это старый вопрос, но если вы собираетесь перегрузить метод == или Object.Equals, вам также следует перегрузить оператор реверсирования!=.
И в этом случае, поскольку вы сравниваете внутренние числа, вам следует перегружать другие операторы сравнения <,>, <=, >=.
Люди, которые будут использовать ваш класс в будущем, будь то сторонние потребители или разработчики, перехватившие ваш код, могут использовать что-то вроде CodeRush или Refactor, что автоматически "перевернет" логику (также называемую отменой условного выражения) и затем сгладьте его, чтобы вырваться из синдрома 25 вложенного if. Если их код делает это, и вы перегружаете оператор ==, не перегружая оператор! =, Это может изменить предполагаемое значение вашего кода.