In the exact setup:
namespace NS
{
class Program
{
static void Main(string[] args)
{
Object obj1 = new A();
Object obj2 = new A();
Console.WriteLine(obj1.GetType());
Console.WriteLine(obj2.GetType());
Console.WriteLine(obj1.Equals(obj2)); // why not entering A::Equals(A a)
Console.ReadLine();
}
}
class A
{
int x;
public bool Equals(A a)
{
Console.WriteLine("enters Equals");
return this.x == a.x;
}
}
}
I have the output from console app in C#:
NS.A
NS.A
False
Question: If ojb1 and obj1 are of type NS.A why public bool Equals(A a) is not entered?
Is Console.WriteLine(obj1.GetType()); "lies" about a real object type. I am confused?
I wanted to call A.Equals(A) method from code even though Object obj1 = new A();
I know I can fix the problem with A obj1 = new A(); but I am stuck with understanding why GetType() returns the A and I cannot call the A.Equals(A).
You need to let it know it is overriding and not creating a new function.
Your code is creating two objects obj1 and obj2. While asking for the object type, it is returning the type A as that is the type of obj1 and obj2. However you are containing obj1 and obj2 in an object variable. So when you call obj1.Equals it is calling Object's Equals method. You can override this with the override command and taking the same parameters in, or you can explicitly tell your program you want it to use the (A) class method.
returns
Here is more information about overriding.
Cheers!