为什么variance说明符只能在Interface或delegate上声明

时间:2014-05-06 08:36:54

标签: c# covariance

我有一个具有类型参数的类,我想将其分配给更通用的类型参数:

public StrategyContext<T> : where T : IStrategy {}

StrategyContext是一个帮助设计单元测试的类。使用xUnit和Theroy属性,我可以对我的所有策略断言一些常见的行为。例如:

[Theory]
[InlineData(typeof(LeftStrategy))]
[InlineData(typeof(RightStrategy))]
public void HasAName(Type contextType)
{
    Type strategy = typeof(StrategyContext<>);
    var context = (StrategyContext<IStrategy>)Activator.CreateInstance(strategy.MakeGenericType(contextType));
}

不幸的是,运行时无法从StrategyContext<LeftStrategy>转换为StrategyContext<IStrategy>

所以我认为协方差就是我所需要的,但不可能将该类声明为:

public StrategyContext<out T> : where T : IStrategy {}

还有其他解决方案吗?

0 个答案:

没有答案