Как класс может реализовать интерфейс с одним свойством, а также реализовать другой интерфейс - PullRequest
1 голос
/ 08 мая 2020

Извините за нечеткое название. Вроде обычная проблема, но я ничего не могу найти. Мне нужно создать класс, реализующий интерфейс, как показано ниже, но почему я получаю эту ошибку? Что-то не хватает или это невозможно?

    public class Car : ICar
    {
        public Wheel Wheel { get; set; } //this makes relation in db
    }

    public interface ICar
    {
        IWheel Wheel { get; set; }
    }

    public class Wheel : IWheel
    {

    }

    public interface IWheel
    {

    }

Ошибка:

'Car' does not implement interface member 'ICar.Wheel'. 'Car.Wheel' cannot implement 'ICar.Wheel' because it does not have the matching return type of 'IWheel'.

1 Ответ

2 голосов
/ 08 мая 2020

Реализуйте свойство из интерфейса явно :

public class Car : ICar
{
    public Wheel Wheel { get; set; }

    IWheel ICar.Wheel
    {
        get { return Wheel; }
        set { Wheel = (Wheel)value; }
    }
}

Таким образом, пользователи вашего класса увидят «исходное» свойство Wheel, набранное как полноценное Wheel, тогда как тот, кто использует интерфейс, получит явную реализацию (которая, в вашем случае, напрямую сопоставляется с другим свойством, но в любом случае рассматривается компилятором отдельно).

Примечание приведение в сеттере и его последствия, если интерфейс действительно должен иметь свойство записи.

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