我使用提供通用包装类的API和另一个通用类,该类期望类具有包装器实现的接口。现在,我的项目还具有一个通用包装器,该包装器从API继承而来,并将其通用参数限制为我的数据结构所使用的基类,因为存在公共成员等。同样,我也有自己的顶级通用类,该类继承自API的顶级通用类。抱歉,描述混乱,请参阅提供的代码。
问题:有了解决方案,我每次实现顶级通用类时都必须指定2个通用参数。即使第二个应该比第一个重要。我怎么能或者为什么不能写出来,而只需要在从顶级抽象类继承的类中指定顶级通用参数呢?
所提供的代码是我能想到的解决方案,它本身可以工作,但实践似乎很糟糕。
//外部api结构:
public abstract class Parameter<T> where T : IDataType
{
// various members to deal with parameter related functions
public virtual T Data { get; set; }
}
public abstract class DataType<T> : IDataType
{
// various members to deal with data type related functions
public virtual T Value { get; set; }
}
public interface IDataType
{
}
//我的项目特定结构:
public abstract class ProjectSpecificParameter<T, Q> : Parameter<T>
where T : ProjectSpecificDataType<Q>
where Q : ProjectSpecificClass
{
public ProjectSpecificClass GetData() // example method which is common in all my project specific parameters.
{
return Data.Value;
}
}
public abstract class ProjectSpecificDataType<T> : DataType<T> where T : ProjectSpecificClass
{
}
public abstract class ProjectSpecificClass
{
}
//代码现在的外观:
public class ChairParameter : ProjectSpecificParameter<ChairData, Chair>
{
}
public class ChairData : ProjectSpecificDataType<Chair>
{
}
public class Chair : ProjectSpecificClass
{
// chair specific stuff...
}
//我希望它看起来如何:
public class ChairParameter : ProjectSpecificParameter<ChairData>
{
}
public class ChairData : ProjectSpecificDataType<Chair>
{
}
public class Chair : ProjectSpecificClass
{
// chair specific stuff...
}