Почему в этом определении оператора создается исключение stackoverflowexception?

Пожалуйста, смотрите мой комментарий в коде ниже. Как мне проверить, чтобы параметр был null? Похоже, что nullприводится к Foo, что по существу делает рекурсивный вызов оператора ==. Почему это происходит?

public class Foo
{
    public static bool operator ==(Foo f1, Foo f2)
    {
        if (f1 == null) //This throw a StackOverflowException
            return f2 == null;
        if (f2 == null)
            return f1 == null;
        else
            return f1.Equals((object)f2);
    }

    public static bool operator !=(Foo f1, Foo f2)
    {
        return !(f1 == f2);
    }

    public override bool Equals(object obj)
    {
        Foo f = obj as Foo;
        if (f == (Foo)null)
            return false;

        return false;
    }

    public override int GetHashCode()
    {
        return 0;
    }
}
8
задан Ropstah 11 March 2012 в 15:02
поделиться