【发布时间】:2022-01-12 21:39:02
【问题描述】:
在确切的设置中:
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;
}
}
}
我有来自 C# 控制台应用程序的输出:
NS.A
NS.A
False
问题:如果ojb1 和obj1 是NS.A 类型,为什么不输入public bool Equals(A a)?
Console.WriteLine(obj1.GetType()); 是关于真实对象类型的“谎言”。我很困惑?
我想从代码中调用A.Equals(A) 方法,即使Object obj1 = new A();
我知道我可以用A obj1 = new A(); 解决这个问题,但我不明白为什么GetType() 返回A 而我不能调用A.Equals(A)。
【问题讨论】:
-
您在代码中调用
Object.Equals(Object),而不是A.Equals(A)。您的意思是覆盖Object方法吗? stackoverflow.com/questions/9317582/… -
是的。就是这个主意。
标签: c# class inheritance methods gettype