Considerate queste classi:

 public interface IMyInterface
 {
  void Method1();
 }
 public class ClassA:IMyInterface
 {
  public void Method1()
  {
   Console.WriteLine("ClassA.Method1");
  }
 }
 public class ClassB:ClassA
 {
  new public void Method1()
  {
   Console.WriteLine("ClassB.Method1");
  }
 }

Considerate questo codice:

 IMyInterface a = new ClassA();
 a.Method1();
 IMyInterface b = new ClassB();
 b.Method1();

 Console.ReadLine();

per quale motivo il risultato è questo?

ClassA.Method1
ClassA.Method1

Sembra che il runtime cerca a ritroso la classe che implementa esplicitamente l'interfaccia per eseguire il metodo corrispondente, ma non è il comportamento che ci si aspetta. Ovviamente implementando l'interfaccia anche in ClassB il tutto ritorna normale.

Ci ho perso 30 minuti oggi... :-(