Я возился с polymorphisem, и у меня возник странный случай, которого я не понимаю:
У меня есть класс A, который реализует Equals (Object other), и класс B, который наследуется от A и переопределяет equals, Кроме того, у него есть Equals (A other) и Equals (B other), в основной функции Ive сделал 3 объекта, A a, B b и A ab.
код всего этого:
class A
{
public A()
{
}
public override bool Equals(Object other)
{
Console.WriteLine("AObject");
return true;
}
};
class B : A
{
public B()
{
}
public override bool Equals(Object other)
{
Console.WriteLine("BObject");
return true;
}
public bool Equals(A other)
{
Console.WriteLine("BA");
return true;
}
public bool Equals(B other)
{
Console.WriteLine("BB");
return true;
}
};
class Program
{
static void Main(string[] args)
{
A a1 = new A();
A ab = new B();
B b1 = new B();
if (ab.Equals(a1)) Console.WriteLine(1);
if (ab.Equals(b1)) Console.WriteLine(1);
if (ab.Equals(ab)) Console.WriteLine(1);
}
Всякий раз, когда я запускаю программу, она печатает BObject, что означает, что она вызывает функцию Equals класса B, имеет смысл, но по какой-то причине обрабатывает все другие объекты, которые она получает как параметр, как Object type?
Когда я делаю то же самое, но с намерением сделать это из ab, я делаю это из b1 (т.е. if (b1.Equals(a1)) Console.WriteLine(1);
), он отлично работает и печатает BA, так что это кастинг делает его странным, я был бы рад, если бы кто-нибудь мог объяснить мне, почему он вызывает Equals (Другой объект), а не Equals (Другой) или Equals (B другой)
Спасибо!
edit: To Уточните, мой вопрос: почему разные объекты типа A являются nd B обрабатывается как они из объекта типа в функции Equal.
Я понимаю, что A ab = new B();
делает, я просто не понимаю, почему он использует Equal(Obejact other)
, а не Equal(A other)