这个非常简单的例子让我感到困惑:
public class X {
public void XMethod(A a) {
Console.WriteLine(a.GetType());
Console.WriteLine("Got A");
}
public void XMethod(B b) {
Console.WriteLine(b.GetType());
Console.WriteLine("Got B");
}
}
public abstract class A {
public virtual void M(X x) {
Console.WriteLine(this.GetType());
x.XMethod(this);
}
}
public class B : A {
}
class Program {
static void Main(string[] args) {
X x = new X();
B b = new B();
b.M(x);
}
}
这个的输出是
B
B
Got A
直到'Got A'之前的一切都很好。我希望当我在 class 的实例上X.XMethod(B)
调用方法时会调用该方法。M
B
这里发生了什么?当很明显提供的参数类型是而不是时,为什么会XMethod(A)
调用而不是调用?XMethod(B)
B
A
PS:对于等效实现,我在 java 中得到了相同的输出。