Как установить тип generi c внутри класса generi c - PullRequest
0 голосов
/ 11 марта 2020

У меня есть несколько классов

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);
    }
}

Вместо вопросительного знака я хотел бы сделать что-то вроде T.TRelatedCalculationParameters, потому что во время построения я знаю, что такое T и тип вопросительного знака полностью определен Т. Так я мог бы назвать:

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

Есть ли способ как-то этого добиться?

Спасибо, Ян

1 Ответ

0 голосов
/ 11 марта 2020

Здесь вы ограничиваете T типом вычисления:

class Calculator<T> where T:Calculation

Затем вы хотите сделать:

класс Calculator где T: Calculation {publi c CalculatorParameters Parameters {get; приватный набор; }

В обоих случаях T ограничено типом Calculation.

Но у вас также есть это, что противоречит T типу CalculationParameters:

class CalculatorParameters: Параметры где T: CalculationParameters {..}

Вы не можете ограничить T как Calculation, так и CalculationParameters, так как между ними нет отношений наследования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...