public class Program : gradchildClass
Console.WriteLine("ctor of program");
public void testProgram(){
Console.WriteLine("method of program");
public void methodOverloading(){
Console.WriteLine("child Class --> using same method in both class to test which method gets called for which class object");
public virtual void checkVirtualBehaviour(){
Console.WriteLine("Program ---> what happen if I don not write override method");
public static void Main()
Console.WriteLine("instance of program created");
Program p = new Program();
p.checkVirtualBehaviour();
Console.WriteLine("============================");
Console.WriteLine("instance of gradchildClass created");
gradchildClass g = new Program();
g.checkVirtualBehaviour();
Console.WriteLine("============================");
public void testparentClass(){
Console.WriteLine("method of parentClass");
Console.WriteLine("Parent Class ctor");
public class childClass : parentClass
public void testchildClass(){
Console.WriteLine("method of childClass");
Console.WriteLine("child Class ctor");
public class gradchildClass : childClass
public void testgradchildClass(){
Console.WriteLine("method of gradchildClass");
public void methodOverloading(){
Console.WriteLine("Parent Class --> using same method in both class to test which method gets called for which class object");
public virtual void checkVirtualBehaviour(){
Console.WriteLine("what happen if I don not write override method");
Console.WriteLine("gradchildClass Class ctor");