На ваш первый вопрос уже дан ответ. Вот пример для остальных:
void new InsertUser(User user)
Это создаст новую реализацию InsertUser, которая будет скрывать одну в базовом классе. Итак:
myClassBInstance.InsertUser(user);
вызовет MyClassB.InsertUser (), тогда как
MyClassA myClassAInstance = myClassBInstance;
myClassAInstance.InsertUser(user);
вызовет MyClassA.InsertUser ().
Это отличается от явной реализации интерфейса, которая будет только доступной через интерфейс Тогда
IMyClassA myIClassAInstance = myClassBInstance;
myIClassAInstance.InsertUser(user);
вызовет MyClassB.InsertUser, тогда как:
myClassBInstance.InsertUser(user);
... вызовет MyClassA.InsertUser ().
Теперь, последний вопрос: если MyClassA реализует IMyClass, объявление:
public class MyClassB : MyClassA, IMyClass { }
фактически избыточно (но законно). Как вы предполагаете, MyClassB наследует интерфейс от MyClassA. Итак, декларация
public class MyClassB : MyClassA { }
будет эквивалентно.