Переопределяя виртуальную функцию, вы расширяете функциональность вашего базового класса, а затем вызываете базовый класс для «базовой функциональности».
Если вы удалите строку 'return base.calc(a,b)
', базовый класскод не будет выполняться.
Если вы хотите полностью заменить функциональность, это не проблема, но если вы хотите расширить функциональность, вам также следует вызвать базовый класс.
Следующий код демонстрирует это (простоэто в консольном приложении)
class advanc
{
public virtual int calc(int a, int b)
{
Console.WriteLine("Base function called");
return (a * b);
}
}
class advn : advanc
{
public bool CallBase { get; set; }
public override int calc(int a, int b)
{
Console.WriteLine("Override function called");
if (CallBase)
{
return base.calc(a, b);
}
else
{
return a / b;
}
}
}
private static void Main()
{
advn a = new advn();
a.CallBase = true;
int result = a.calc(10, 2);
Console.WriteLine(result);
a.CallBase = false;
result = a.calc(10, 2);
Console.WriteLine(result);
Console.WriteLine("Ready");
Console.ReadKey();
}