Переменная sum
в Test1Class
скрывает / скрывает переменную sum
в TestClass
. Поэтому, когда вы ссылаетесь на sum
в Test1Class
в методе Add
, он ссылается на переменную Test1Class
. Однако в последнем операторе печати в t.showValue()
вы вызываете переменную суммы TestClass
, которая еще никогда не изменялась. Это, следовательно, дает вам значение по умолчанию 0.
Что вы, вероятно, намеревались сделать, это полностью избавиться от переменной-члена Test1Class и использовать TestClass, поскольку вы в любом случае устанавливаете ее защищенной, чтобы она была легко доступна для всех производных классов.
Вы, вероятно, намеревались что-то вроде этого:
using System;
namespace xyzApp
{
class Program
{
public static void Main(string[] args)
{
Test1Class t = new Test1Class ();
t.Add(4);
t.Add(11.1);
t.showValue();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
class TestClass{
protected double sum =0;
public void Add(int x)
{
sum+=x;
}
public void showValue()
{
Console.WriteLine(" the sum is : {0}",sum);
}
}
class Test1Class :TestClass
{
public void Add(double x)
{
sum+=x;
Console.WriteLine(" the sum is : {0}",sum);
}
}
}
Все, что я сделал, это удалил double sum;
из Test1Class и изменил переменную суммы в TestClass на double, и вы должны получить результаты, которые вы ищете. (Использование защищенных переменных не очень рекомендуется, хотя ...)