gpt4 book ai didi

c# - 创建一个没有在类上指定类型参数的泛型类型成员变量

转载 作者:太空宇宙 更新时间:2023-11-03 14:12:49 26 4
gpt4 key购买 nike

我为标题不明确表示歉意,我真的不知道还能怎么说。我将用代码进行演示。

public class CalculationService
{
private static Calculator<StaticInstrument, StaticResult> _staticCalculator;
private static Calculator<DynamicInstrument, DynamicResult> _dynamicCalculator;
private static readonly object IsInitializedLock = new object();

public byte[] ProcessStatic()
{
lock (IsInitializedLock)
{
_staticCalculator = new Calculator<StaticInstrument, StaticResult>();
}

return _staticCalculator.Calculate();
}

public byte[] ProcessDynamic()
{
lock (IsInitializedLock)
{
_dynamicCalculator = new Calculator<DynamicInstrument, DynamicResult>();
}

return _dynamicCalculator.Calculate();
}
}

除了 Calculator 对象的类型参数不同之外,我有许多相同的方法。

问题是,因为CalculationService是 WCF 服务,它不能有任何类型参数。出于这个原因,我不能简单地创建一个静态成员 Calculator<TInstrument, TResult> ,因为我不能将类型参数放在 CalculationService 上.

我的理想解决方案是这样的:

public class CalculationService
{
private static Calculator<TInstrument, TResult> _calculator;
private static readonly object IsInitializedLock = new object();

public byte[] Process<TInstrument, TResult>()
{
lock (IsInitializedLock)
{
_calculator = new Calculator<TInstrument, TResult>();
}

return _calculator.Calculate();
}

public byte[] ProcessStatic()
{
return Process<StaticInstrument, StaticResult>();
}

public byte[] ProcessDynamic()
{
return Process<DynamicInstrument, DynamicResult>();
}
}

但我无法创建 private static Calculator<TInstrument, TResult> _calculator未在 CalculationService 上指定类型信息的成员,这是我不能用 WCF 做的。

我能想到的唯一方法就是拥有

private static dynamic _calculator;

还有别的办法吗?如果可能的话,我宁愿避免使用动态,我不确定性能影响是什么,如果有的话。

最佳答案

我不认为我理解你后来关于“我的 CalculationService 类上只有 一个 Calculator 实例”的评论;相反,在我看来,每个 都需要一个实例,就像您最初发布的代码一样。我认为下面的代码会做你想做的事(额外的好处是静态初始化规则将在正确的时间线程安全地构造计算器)。

public class CalculationService {
private static class Inner<TInstrument, TResult> {
public static readonly Calculator<TInstrument, TResult> _calculator;

static Inner() {
_calculator=new Calculator<TInstrument, TResult>();
}
}

public byte[] ProcessStatic() {
return Inner<StaticInstrument, StaticResult>._calculator.Calculate();
}

public byte[] ProcessDynamic() {
return Inner<DynamicInstrument, DynamicResult>._calculator.Calculate();
}
}

关于c# - 创建一个没有在类上指定类型参数的泛型类型成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7272618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com