简体   繁体   English

如何在泛型类中设置泛型类型

[英]How do I set a generic type inside a generic class

I have a few classes我有几节课

class Parameters{..}
class CalculationParameters : Parameters{..}
class CalculatorParameters<T> : Parameters where T:CalculationParameters{..}

class FourierTransformParameters : CalculationParameters
{
    public double FourierTransformCoefficient{ get; set; }
}

class Calculation{..}
class FourierTransform : Calculation{..}

class Calculator<T> where T:Calculation
{
    public CalculatorParameters<?> Parameters{ get; private set; }

    public Calculator(T calculation,int p1)
    {
        Parameters = new CalculatorParameters<?>(calculation.Parameters,p1);
    }
}

In place of the questionmark, I would like to do something like T.TRelatedCalculationParameters, because at the time of construction, I know what T is and the questionmark type is fully defined by T. This way I could call:代替问号,我想做一些类似 T.TRelatedCalculationParameters 的事情,因为在构造的时候,我知道 T 是什么,问号类型完全由 T 定义。这样我可以调用:

var ft         = new FourierTransform()
var calculator = new Calculator<FourierTransform>(ft,3);
calculator.Parameters.FourierTransformCoefficient = 3;

I there a way to achieve this somehow?我有办法以某种方式实现这一目标吗?

Thanks, Jan谢谢,简

Here you are constraining T to be type Calculation:在这里,您将 T 限制为类型 Calculation:

class Calculator<T> where T:Calculation

You then want to do:然后你想做:

class Calculator where T:Calculation { public CalculatorParameters Parameters{ get;类计算器其中 T:Calculation { public CalculatorParameters Parameters{ get; private set;私人订制; } }

In both cases T is contrained as type Calculation.在这两种情况下,T 都被限制为类型 Calculation。

But you also have this, which contrains T to type CalculationParameters:但是你也有这个,它限制 T 输入 CalculationParameters:

class CalculatorParameters : Parameters where T:CalculationParameters{..}类 CalculatorParameters : 参数,其中 T:CalculationParameters{..}

You cannot constrain T to both Calculation and CalculationParameters, as there is no inheritance relationship between them.您不能将 T 限制为 Calculation 和 CalculationParameters,因为它们之间没有继承关系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM