Правильный ответ: К счастью собеседователь рассказал что он уходи в бесконечную рекурсию т.к.
на строчке 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 right)
{
return left == right; // вызов этой же функции(бесконечная рекурсия), т.к. мы перегрузили этот оператор.
}
Підтримати Україну у боротьбі з країною-терористом.
Здравствуйте, bo99ard, Вы писали:
B>Об этом и речь, получилось на реальном примере воспроизвести рекурсию. У меня нет
x64? При определённых условиях JIT может превратить вызов в хвостовую рекурсию, ваш случай подходит. Укажите целевую платформу x86 — должно "помочь"
Здравствуйте, ichensky, Вы писали:
I>Здравствуйте, bo99ard, Вы писали:
B>>Может кто нибудь сказать в чем дело?
I>В принципе, что бы код скомпилировался достаточно добавить метод,
т.к. что вас развели код не должен даже запускаться:
I>
I> public static bool operator == (MyClass left, MyClass right)
I> {
I> return left == right; // вызов этой же функции(бесконечная рекурсия), т.к. мы перегрузили этот оператор.
I> }
I>
Об этом и речь, получилось на реальном примере воспроизвести рекурсию. У меня нет
Предоставьте, пожалуйста, рабочий пример в студию.
Здравствуйте, bo99ard, Вы писали:
B>Об этом и речь, получилось на реальном примере воспроизвести рекурсию. У меня нет
B>Предоставьте, пожалуйста, рабочий пример в студию.
Поставь на каждую строчку этой функции точку останова в дебагере.
Підтримати Україну у боротьбі з країною-терористом.
Здравствуйте, drol, Вы писали:
D>И причём тут JIT и x64 ?
А, в этом смысле Топикстартер вроде бы правил код (хотя с его форматированием фиг поймёшь):
B>Он есть в окончательном варианте.
B>рекурсия будет происходить вот здесь:
public static bool operator == (MyClass left, MyClass right)
{
return left == right; // вызов этой же функции(бесконечная рекурсия), т.к. мы перегрузили этот оператор.
}
B>Об этом и речь, получилось на реальном примере воспроизвести рекурсию. У меня нет