class clsTestParent
{
public void testNoAbstract()
{
Console.WriteLine("Parent Method Call");
}
}
class clsDerivedTest : clsTestParent
{
public void testNoAbstract()
{
Console.WriteLine("Child Method Hiding Parent Method");
}
}
clsTestParent objParent = new clsTestParent();
clsTestParent objOfParentFromDerived = new clsDerivedTest();
clsDerivedTest objDerived = new clsDerivedTest();
objParent.testNoAbstract();
objOfParentFromDerived.testNoAbstract();
objDerived.testNoAbstract();
Вывод:
Вызов родительского метода
Вызов родительского метода
Скрытие дочернего метода Родительский метод
Но когда я объявляю testNoAbstract()
виртуальным иЕсли перебрать в производном классе, то выход будет таким, как показано ниже:
Parent Method Call
Child Method Hiding Parent Method
Child Method Hiding Parent Method
Раньше я думал, что мы можем переопределить метод только в производном классе, если он определен как abstract
или virtual
, но, как видно сейчас, мы можем скрыть метод родительского класса, просто переопределив его в производном классе.
Хотя, как я вижу, разницу в выводе путем изменения кода я хотел бы знатьКаковы различия между двумя вышеупомянутыми методами и почему они дают разный результат?