После перегрузки оператора ==, как сравнивать, если две переменные указывают на один и тот же объект? - PullRequest
5 голосов
/ 06 марта 2009

Перегрузка оператора сравнения, как сравнивать, если две переменные указывают на один и тот же объект (т.е. не значение)

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 ]

8 голосов
/ 06 марта 2009

Используйте статический метод Object.ReferenceEquals.

Конечно, чтобы метод == и! = Сохранял их полную функциональность, вы также должны переопределить Equals и GetHashCode, чтобы они возвращали согласованный набор ответов вызывающим.

4 голосов
/ 06 марта 2009

Чтобы проверить, указывают ли оба объекта на один и тот же объект. Вы должны использовать метод Object.ReferenceEquals. Он вернет true, если оба одинаковы или оба равны нулю. В противном случае он вернет false

4 голосов
/ 06 марта 2009

Попробуйте a.ReferenceEquals(b);

0 голосов
/ 03 ноября 2011

Я знаю, что это старый вопрос, но если вы собираетесь перегрузить метод == или Object.Equals, вам также следует перегрузить оператор реверсирования! =.

И в этом случае, поскольку вы сравниваете внутренние числа, вам следует перегружать другие операторы сравнения <,>, <=,> =.

Люди, которые будут использовать ваш класс в будущем, будь то сторонние потребители или разработчики, которые перехватят ваш код, могут использовать что-то вроде CodeRush или Refactor, что автоматически «перевернет» логику (также называемую обращением условно), а затем сгладить его, чтобы вырваться из синдрома 25 вложенных if. Если их код делает это, и вы перегружаете оператор ==, не перегружая оператор! =, Это может изменить предполагаемое значение вашего кода.

...