in c# program below value of baseclass deffers from derived class same variable which is inherited, baseclass is abstract, but variable is declared in baseclass only. Here is the C# console program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestApplication
{
class MainClass
{
abstract class CBaseClass
{
public int iCount;
public CBaseClass()
{
Console.WriteLine("CBaseClass created");
iCount = 30;
}
public virtual void Add() { iCount += 20; }
public virtual void Add(int iAdd) { iCount += iAdd; }
public void Subtract() { iCount -= 20; }
public abstract void Subtract(int iSubtract);
public override string ToString()
{
return base.ToString() + ".. Method of BaseClass";
}
~CBaseClass() { Console.WriteLine("CBaseClass deleted"); }
};
class CDerivedClass : CBaseClass
{
public CDerivedClass()
{
Console.WriteLine(" CDerivedClass created.");
iCount = 50;
}
public override void Add()
{
iCount += 20;
}
public void Add(int iAdd)
{
iCount += iAdd;
}
public void Subtract()
{
iCount -= 40;
}
public sealed override void Subtract(int iSubtract)
{
iCount -= 10;
}
~CDerivedClass() { Console.WriteLine("CDerivedClass deleted \n"); }
};
static void Main(string[] args)
{
CDerivedClass deriveObject = new CDerivedClass();
CBaseClass basePointer = new CDerivedClass();
CDerivedClass notUsed;
Console.WriteLine("1:" + deriveObject.iCount);
deriveObject.Add();
Console.WriteLine("2:" + deriveObject.iCount);
basePointer.Add(30);
Console.WriteLine("3:" + basePointer.iCount);
basePointer.Subtract();
Console.WriteLine("4:" + basePointer.iCount);
basePointer.Subtract(20);
Console.WriteLine("5:" + basePointer.iCount);
Console.WriteLine("6:{0}",basePointer);
Console.ReadLine();
}
}
}
Here is the output:
CBaseClass created
CDerivedClass created.
CBaseClass created
CDerivedClass created.
1:50
2:70
3:80
4:60
5:50
6:TestApplication.MainClass+CDerivedClass..Method of BaseClass
here in above output i can't understand .. when we call base class method add(30)
.
basePointer.Add(30);
When we call this method... before that value of iCount
is 70. but after this its becoming 50. how ?
i expect output of 3: 100