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

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Явная реализация интерфейса не может быть виртуальной.

Сообщение Anonymous »

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

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

Код: Выделить всё

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 причины.
  • Скрытие определенных методов (для чего я его использую).
  • Наличие двух функций с одинаковой сигнатурой, но разными типами возвращаемого значения
    (полезно, например, для IClonable).
Однако здесь ничего не говорится о том, почему вы не можете сделать эти методы виртуальными.

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

Подробнее здесь: https://stackoverflow.com/questions/709 ... be-virtual
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»