当我尝试运行以下代码片段时,它正在执行错误的重载方法。我很困惑为什么这样做? [testB.TestMethod(testValue)
方法执行public double TestMethod(double value)
方法]
public class TestA
{
public int TestMethod(int value)
{
return value;
}
}
public class TestB : TestA
{
public double TestMethod(double value)
{
return value;
}
}
static void Main( string[] args )
{
TestB testB = new TestB();
int testValue = 3;
testB.TestMethod(testValue);
}
你对此有什么想法吗?
有没有办法通过TestB实例调用TestA类方法而不强制转换为TestA。?
但是在JAVA和C ++中没有发生
答案 0 :(得分:22)
根据规范,在“过载决议”下:
...如果派生类中的任何方法适用(第7.6.5.1节),则基类中的方法不是候选者。
答案 1 :(得分:9)
<强>继承强>
继承可能会导致混乱的效果。当编译器去的时候 寻找实例方法重载,它考虑编译时 调用的“目标”的类,并查看声明的方法 那里。如果它找不到合适的东西,那么它会查看父级 上课......然后是祖父母班等。这意味着如果有的话 在层次结构的不同层次上的两种方法,“更深层次” 将被选中,即使它不是“更好的功能成员” 电话。
来源:http://csharpindepth.com/Articles/General/Overloading.aspx