Общий интерфейс с реализациями по умолчаниюC#

Место общения программистов C#
Ответить
Anonymous
 Общий интерфейс с реализациями по умолчанию

Сообщение Anonymous »

У меня есть этот интерфейс:

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

public interface IDebugEndPoint
{
void InstructionReady(ICPU cpu);
}
где ICPU реализуется многими конкретными типами процессоров. Я передаю IDebugEndPoint в ICPU для "вещей".
Я пишу классы, реализующие IDebugEndPoint, и сразу же привожу ICPU к конкретному типу.
Я хотел бы создать такой новый интерфейс:

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

public interface IDebugEndPoint : IDebugEndPoint
where TCPU : ICPU
{
void InstructionReady(ICPU cpu) => InstructionReady((TCPU)cpu);
void InstructionReady(TCPU cpu);
}
Классы, реализующие этот интерфейс, реализуют строго типизированную версию InstructionReady и могут быть переданы как IDebugEndPoint.
Я столкнулся с двумя проблемами:
  • Компилятор предупреждает меня, что InstructionReady(ICPU...) скрывает унаследованную версию и ее нужно пометить как новый
  • Классы, реализующие этот интерфейс, вынуждены реализовывать оба метода. Это как если бы реализация по умолчанию игнорируется.
Мой обходной путь — определить класс, который реализует IDebugEndPoint и вызывает виртуальный метод, строго типизированный с помощью универсального метода. Но я хотел бы избежать наследования от этого класса и вместо этого реализовать общий интерфейс.
Как я могу это сделать?

Подробнее здесь: https://stackoverflow.com/questions/798 ... mentations
Ответить

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

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

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

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

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