C# 与类型重写C的接口#

C# 与类型重写C的接口#,c#,.net,types,interface,C#,.net,Types,Interface,我正试图以一种更灵活的方式设置我的航路点系统,这样我就可以使用派生类进行更多的定制,但我一直在努力设置如何为其定义派生类型的功能 我有这样的界面: public interface ISegment { IWaypoint WaypointA { get; set; } IWaypoint WaypointB { get; set; } } 我的细分市场有: public class Segment : ISegment { private Waypoint _wayp

我正试图以一种更灵活的方式设置我的航路点系统,这样我就可以使用派生类进行更多的定制,但我一直在努力设置如何为其定义派生类型的功能

我有这样的界面:

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;
    }
}
航路点等级:

public class Waypoint : IWaypoint 
{

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

     //...custom logic ... //
}
其中,
航路点
是我的派生类和所有自定义逻辑。但我不能这样做,因为它不会将
IWaypoint
转换为
waypoint:IWaypoint
类型的备份字段
\u waypoint


正确的设置方法是什么,这样我可以应用我自己的自定义航路点类,但仍然具有接口要求的严格合同设置?

可能您可以显式地实现
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; }
}

Segment
是否在内部取决于具体的实施
Waypoint
还是只取决于其航路点实施
IWaypoint
Segment
只有IWaypoint实施,否则它将迫使我只使用特定的
航路点
类。那么,究竟什么是不起作用的呢?你能提供一个例子吗?@KirillPolishchuk段中的设置器在语法上是一个错误,因为它无法将IWaypoint转换为Waypoint。你能将
\u waypointA
数据类型更改为
IWaypoint
?当属性类型为
IWaypoint
时,这为什么允许你将
值转换为
Waypoint
?@WDUK,这不是转化,这是铸造。为什么不应该呢?