是否可以避免将接口方法参数类型转换为同一系列类的具体类型?



我有3个接口,大致如下:IData,它环绕着所需的数据IDataInfo以提供有关IData

IDataProvider
{
IData GetData(IDataInfo iDataInfo);
}

对于上述接口,我有几个派生接口系列。例如:

  1. IBikeData : IDataIBikeDataInfo : IDataInfoIBikeDataProvider : IDataProvider
  2. ICarData : IDataICarDataInfo : IDataInfoICarDataProvider : IDataProvider等等。

现在,在IBikeDataProviderICarDataProviderIData GetData(IDataInfo iDataInfo)的具体实现中,我需要将传入的iDataInfo参数类型转换为各自的派生类型(IBikeDataInfoICarDataInfo(,以便其他人访问其他特定功能。我对每个具体实现中的这种类型转换感到有些不舒服,我认为这样做是不对的。有没有办法重构我的设计来防止这种情况?

假设您可以调整IDataProvider界面,似乎泛型将是这里的答案。如果创建逆变和协变类型参数以与IDataIDataInfo类型一致,则可以切换定义以获得如下所示的内容:

public interface IDataProvider<in TIn, out TOut> where TIn : IDataInfo 
where TOut : IData 
{
TOut GetData(TIn dataInfo);
}

然后,可以将IBikeDataProvider接口声明为以下内容:

public interface IBikeDataProvider : IDataProvider<IBikeDataInfo, IBikeData> { }

这将导致以下具体的类实例:

public class BikeDataProvider : IBikeDataProvider
{
public IBikeData GetData(IBikeDataInfo dataInfo)
{
// Do things
}
}

最新更新