Yesterday a colleague of mine asked me a question about how to invoke a method of a base class' base class. Although it is possible it is not a good idea (read more on stackoverflow). The basic idea is to avoid MethodDesc::IsVtableMethod() check (see Shared Source Common Language Infrastructure). That said here is the code.
using System;namespace BaseBaseDemo{ class A { public virtual void M(string text) { Console.WriteLine("A:M({0})", text); } } class B : A { public override void M(string text) { Console.WriteLine("B:M({0})", text); } } class C : B { delegate void DelM(string text); public override void M(string text) { var ptr = this.GetType() .BaseType.BaseType .GetMethod("M").MethodHandle.GetFunctionPointer(); var m = typeof(DelM) .GetConstructor(new Type[] { typeof(object), typeof(IntPtr) }) .Invoke(new object[] { this, ptr }) as DelM; m(text); // base.base.M(text); base.M(text); } } class Program { static void Main(string[] args) { new C().M("test"); } }}