Меня поразила странная «асимметрия» в C #, которую я не совсем понимаю. См. Следующий код:
using System;
using System.Diagnostics;
namespace EqualsExperiment
{
class Program
{
static void Main(string[] args)
{
object apple = "apple";
object orange = string.Format("{0}{1}", "ap", "ple");
Console.WriteLine("1");
Debug.Assert(apple.Equals(orange));
Console.WriteLine("2");
Debug.Assert(apple == orange);
Console.WriteLine("3");
}
}
}
Это может быть очевидно для всех вас, гуру .NET, но второе утверждение не работает.
В Java я узнал, что == является синонимом чего-то, что называется Object.ReferenceEquals здесь. В C # я думал, что Object.operator == использует Object.Equals, который является виртуальным, поэтому он переопределяется в классе System.String.
Может кто-нибудь объяснить, почему второе утверждение не работает в C #? Какое из моих предположений неверно?