public static void DoSomething<TFoo>(this TFoo foo) where TFoo : IFoo<IChild> { IFoo<IChild> bar = foo; //Added by Ashwani ((IFoo<IChild>)foo).DoSomethingElse();//Will Complie foo.DoSomethingElseTotally(); //Will Complie //foo.DoSomethingElse(); // Doesn't compile -- why not? bar.DoSomethingElse(); // OK DoSomethingElse(foo); // Also OK! }