class D2 : D1
{
public override void method1()
{
Console.WriteLine("D2 method1");
}

public void callBaseMethod()
{
base.method1();
}
}


class Program
{
static void Main(string[] args)
{
D2 d2instance = new D2();
d2instance.method1();
d2instance.callBaseMethod();
Type d1type1 = d2instance.GetType().BaseType;
MethodInfo mi1 = d1type1.GetMethod("method1", BindingFlags.Instance | BindingFlags.Public);
mi1.Invoke(d2instance, null);
D1 d2asD1 = d2instance as D1;
MethodInfo mi2 = d1type1.GetMethod("method1", BindingFlags.Instance | BindingFlags.Public);
mi2.Invoke(d2instance, null);
}
}
}