Я попытался заглянуть в код, реализованный для оператора сравнения в строчном классе в С#. Что было найдено:
//THIS IS NOT WHAT I MEANT
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}
//THIS IS WHAT I SEE REALLY and the above is what I would expect to see
public static bool Equals(string a, string b)
{
return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}
public static bool operator ==(string a, string b)
{
return Equals(a, b);
}
Я не знаю, является ли это рефлектор, который играет на меня трюки, но когда я попытался реализовать эту стратегию для своего собственного класса, я получил бесконечный цикл между Equals и перегруженным оператором == (как и ожидалось), Является ли sth другим в строчном классе или это мой рефлектор, который сообщает
static Equals(object o1, object o2)
в классе Object, который должен быть частью класса String?