Ответ 1
Из спецификации в разделе "Разрешение перегрузки":
... и методы в базовом классе не являются кандидатами, если применим какой-либо метод в производном классе (§7.6.5.1).
Пока я пытаюсь запустить следующий фрагмент кода, он выполняет неправильный метод перегрузки. Я смущен, почему это так? [ 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);
}
Есть ли у вас какие-либо идеи об этом?
Есть ли способ вызвать метод класса TestA через экземпляр TestB без передачи как TestA.?
Но этого не происходит в JAVA и С++
Из спецификации в разделе "Разрешение перегрузки":
... и методы в базовом классе не являются кандидатами, если применим какой-либо метод в производном классе (§7.6.5.1).
Наследование
Наследование может вызвать запутанный эффект. Когда компилятор идет ищет перегрузки метода экземпляра, он считает, что время компиляции класс "цели" вызова и рассматривает объявленные методы там. Если он не может найти что-либо подходящее, он затем смотрит на родителя класс... затем класс дедушки и т.д. Это означает, что если есть два метода на разных уровнях иерархии, "более глубокий" будет выбрана первыми, даже если это не "лучший член функции" для вызов.
источник: http://csharpindepth.com/Articles/General/Overloading.aspx