Для записи, я уже видел этот элемент подключения, но я не могу понять, в чем проблема с поддержкой этого.
Скажем, у меня есть следующий код:
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();
}
}
однако, таким образом, у меня действительно нет никаких признаков того, что я чем-то переопределяю.
Update:
Согласно С# (часть: 20.4.1 Явные реализации элементов интерфейса), есть две причины.
- Скрытие определенных методов (которые я использую для этого).
- Наличие двух функций с одной и той же сигнатурой, но с разными типами возврата (полезно, например, для IClonable).
Ничего не говорится о том, почему вы не можете сделать эти методы виртуальными.
Update2:
Учитывая ответы, я думаю, что я должен перефразировать реальный вопрос здесь. Если приведенные выше 2 причины являются причиной того, что явная реализация интерфейсов стала возможной в первую очередь. Почему это будет проблемой, если вы сделаете метод виртуальным.