Реализация общих интерфейсов - PullRequest
2 голосов
/ 24 февраля 2011

Я написал этот код.

public interface IMusicInstrument
{
  string InstrumentType(int InstrumentId);                
}

public interface IGuitar<T, K> where T : GuitarBase where K : IMusicInstrument
{
    string Name { get; set; }
    string GetType(T t);
}

public class ElectricGuitar : GuitarBaseExtended, IGuitar<ElectricGuitar, IMusicInstrument>
{
    public string Name { get; set; }
    public string GetType(ElectricGuitar t)
    {
        return "The electric guitar is: " + t.Name;
    }
}

Я думал, что, поскольку IMusicInstrument требует, чтобы я реализовал метод с именем InstrumentType, чтобы при включении его в качестве параметра в интерфейс IGuitar, реализованного в классе ElectricGuitar, я получал ошибку времени компиляции. Тем не менее, я не.

Я неправильно это реализую?

Моя цель - внедрить IMusicInstrument в общий типизированный интерфейс IGuitar, чтобы были соблюдены оба требования IMusiInstrument и IGuitar.

Есть идеи?

1 Ответ

1 голос
/ 24 февраля 2011

Вы не сказали, что ElectricGuitar реализует IMusicInstrument ... вы только что сказали, что он реализует IGuitar<ElectricGuitar, IMusicInstrument>, а , что не имеет InstrumentType метода. Непонятно, почему у вас вообще есть параметр типа K в IGuitar<T, K>, учитывая, что он не используется в интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...