Интерфейсы с переопределением типа C # - PullRequest
1 голос
/ 06 мая 2019

Я пытаюсь настроить мою систему путевых точек более гибким способом, чтобы я мог использовать производные классы для дополнительной настройки, но я застрял с тем, как установить возможность определения производного типа для него.

Iиметь такой интерфейс:

public interface ISegment
{
    IWaypoint WaypointA { get; set; }
    IWaypoint WaypointB { get; set; }
}

И мой сегмент имеет:

public class Segment : ISegment
{
    private Waypoint _waypointA;
    public IWaypoint WaypointA
    {
        get => _waypointA;
        set => _waypointA = value;
    }

    private Waypoint _waypointB;
    public IWaypoint WaypointB
    {
        get => _waypointB;
        set => _waypointB = value;
    }
}

Класс Waypoint:

public class Waypoint : IWaypoint 
{

     public Vector3 Position {get; set;} // from IWaypoint

     //...custom logic ... //
}

Где Waypoint - мой производный класс свся моя нестандартная логика.Но я не могу сделать это таким образом, потому что он не преобразует IWaypoint в вспомогательное поле _waypoint типа Waypoint : IWaypoint.

Как правильно настроить это, чтобы я могприменить мой собственный класс waypoint, но все еще иметь жесткую настройку контракта, которую требует интерфейс?

1 Ответ

1 голос
/ 06 мая 2019

Возможно, вы можете реализовать ISegment явно, то есть:

public class Segment : ISegment
{
    public Waypoint WaypointA { get; set; }

    IWaypoint ISegment.WaypointA
    {
        get => WaypointA;
        set => WaypointA = (Waypoint) value; // throw an exception if value is not of type Waypoint
    }
}

public interface IWaypoint { }

public class Waypoint : IWaypoint { }

public interface ISegment
{
    IWaypoint WaypointA { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...