接口继承比方说,我有以下类型没有返回类型的协方差
public interface ITimeSeriesData
ITimeSeriesData Add(ITimeSeries timeSeries)
此接口表示一组时间序列数据的合同的一个简单的C#接口。为了简单起见,我只包含一种方法,即添加一个时间序列并获得与此相加相对应的一组新数据(将数据视为不可变的,因此当添加新时间序列时,原始实例不变,并返回一组新的时间序列数据)。我还有另外一个接口,它代表也包含时间序列数据的类的契约,但是它强制所有时间序列包含相同数量的元素。
public interface ISquareTimeSeriesData
ISquareTimeSeriesData Add(ITimeSeries timeSeries)
现在,理想情况下,我希望任何ISquareTimeSeriesData都是ITimeSeriesData。并用返回类型的协方差,我可以简单地写
public interface ISquareTimeSeriesData : ITimeSeriesData
ISquareTimeSeriesData Add(ITimeSeries timeSeries)
,并因为任何ISquareTimeSeriesData那么将是一个ITimeSeriesData,我有一个贯彻落实“ISquareTimeSeriesData添加(ITimeSeries时间序列)”的方法也可以是任何类只能算作实施“ITimeSeriesData添加(ITimeSeries timeSeries)”。但是,C#没有返回类型协方差,因此上述解决方案不起作用。
有没有一种优雅的方式呢?目前,我只是在ISquareTimeSeriesData接口中有一个方法.AsTimeSeriesData(),它将任何ISquareTimeSeriesData作为ITimeSeriesData返回。虽然这不是特别优雅。
感谢您的回答。我认为这个解决方案很有意义。不过,据我所知,它需要实现ISquareTimeSeriesData的类来实现两个Add方法(包括ITimeSeriesData和ISquareTimeSeriesData)。因此,如果我迭代这个解决方案(例如有一个实现ISquareTimeSeriesData的IDoubleSquareTimeSeriesData),我最终不得不实现三个Add方法等等。但是我想这件事没有太多要做。 –