Явная реализация интерфейса не может быть виртуальной

Для протокола, я уже видел этот элемент подключения , но я не могу понять, в чем проблема при его поддержке.

Скажем, у меня есть следующее код:

public interface IInterface
{
    void Method();
}

public class Base : IInterface
{
    virtual void IInterface.Method()
    {
        throw new NotImplementedException();
    }
}

в чем проблема с виртуальным идентификатором? Наличие виртуального модификатора позволило бы переопределить , указывая, что в базовом классе есть другая реализация. Теперь я могу заставить его работать, удалив виртуальный метод и создав производный класс следующим образом:

public class Derived : IInterface
{
    void IInterface.Method()
    {
        throw new NotImplementedException();
    }
}

однако в этом случае у меня вообще нет никаких указаний на то, что я что-то переопределяю.

Обновление:
Согласно спецификации C # (часть: 20.4.1 Явные реализации члена интерфейса) есть 2 причины.

  1. Скрытие определенных методов (для которых я его использую).
  2. Наличие двух функций с одинаковой сигнатурой, но с разными типами возврата. (полезно, например, для IClonable.)

Однако здесь ничего не говорится о том, почему вы не можете сделать эти методы виртуальными.

Update2:
Учитывая ответы, я думаю, что мне следует перефразировать реальный вопрос здесь. Если Вышеуказанные 2 причины - причина, по которой явная реализация интерфейсов стала возможной в первую очередь. Почему это может быть проблемой, если вы сделаете метод виртуальным.

13
задан thekip 17 August 2011 в 11:19
поделиться