Кстати, я уже видел этот элемент подключения , но я не могу понять, в чем проблема с его поддержкой.
Скажем, у меня есть следующий код:
public interface IInterface
{
void Method();
}
public class Base : IInterface
{
virtual void IInterface.Method()
{
throw new NotImplementedException();
}
}
в чем проблема с виртуальным идентификатором?Наличие виртуального модификатора позволило бы override
указать, что в базовом классе есть другая реализация.Теперь я могу заставить его работать, удалив виртуальный метод и создав производный класс следующим образом:
public class Derived : IInterface
{
void IInterface.Method()
{
throw new NotImplementedException();
}
}
однако таким образом у меня действительно нет никаких признаков того, что я что-то переопределяю.
Обновление:
В соответствии со спецификацией C # (часть: 20.4.1 Явные реализации элементов интерфейса) есть две причины.
- Сокрытие определенных методов (для которых я использую это).
- Наличие 2 функций с одинаковой сигнатурой, но с разными типами возврата (полезно, например, для IClonable).
Однако ничего не сказано о том, почему вы не можете создать эти методыВиртуальный.
Обновление 2:
Учитывая ответы, я думаю, что я должен перефразировать реальный вопрос здесь.Если вышеуказанные 2 причины являются причиной, по которой явная реализация интерфейсов стала возможной в первую очередь.Почему это будет проблемой, если вы сделаете метод виртуальным.