Вопрос на собеседовании
От: bo99ard  
Дата: 08.06.13 18:18
Оценка: :)
Доброго времени суток,

задали такой вопрос:

class MyClass
{

public static bool operator== (MyClass left, MyClass right)
{
return left == right;
}

}

static bool Compare(MyClass o1, MyClass o2)
{
if(o1 == null)
return o2==null;
return o1 == o2;
}

Вопрос что делает этот код?

Правильный ответ: К счастью собеседователь рассказал что он уходи в бесконечную рекурсию т.к.
на строчке if(o1 == null) null приводится к типу MyClass и в теле оператора происходит тоже самое.

Проблема в том, что мне не удается это воспроизвести.

Мало того что не хватает перегруженного оператора != так и для потомка object так же необходимо перегрузить
методы:

public override int GetHashCode()
public override bool Equals(object o)

Мой окончательный вариант:

class MyClass
{
public override int GetHashCode()
{
return 100;
}

public override bool Equals(object o)
{
MyClass m = (MyClass)o;
if (this == m) return true;
else return false;
}

public static bool operator== (MyClass left, MyClass r)
{
return false;
}

public static bool operator !=(MyClass left, MyClass r)
{
return true;
}
}

Но он все равно отрабатывает корректно.

Может кто нибудь сказать в чем дело?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.