Вы должны сделать что-то вроде этого:
interface InterfaceA
{
void MethodA();
}
class ClassA : InterfaceA
{
void InterfaceA.MethodA()
{ MethodB(); }
protected virtual void MethodB()
{
}
}
Часто в любом случае это лучший подход, поскольку внутренний метод может изменить сигнатуру без изменения интерфейса.Возьмите более реальный пример:
interface IOrderDetails
{
void PlaceOrder();
}
//Sometime later you extend with:
interface IOrderDetails2 : IOrderDetails
{
void PlaceOrder(IUser user);
}
//Implementation
class Order : IOrderDetails, IOrderDetails2
{
static readonly IUser AnonUser;
void IOrderDetails.PlaceOrder()
{ OnPlaceOrder(AnonUser); }
void IOrderDetails2.PlaceOrder(IUser user)
{ OnPlaceOrder(user); }
protected virtual void OnPlaceOrder(IUser user)
{
}
}
Здесь вы можете видеть, как был добавлен IOrderDetails2, мы можем безопасно реорганизовать существующий виртуальный метод (таким образом, генерируя ошибки времени компиляции для производных).Кроме того, это часто позволяет вам обеспечить общую функциональность, ведение журналов и обработку исключений в базовом классе реализации ...