访问被限制为通用类的参数的通用参数,而不在顶层指定两个通用参数?

时间:2019-04-03 10:58:43

标签: c# generics inheritance

我使用提供通用包装类的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...
}

0 个答案:

没有答案