小编Chr*_*hac的帖子

界面协方差逆变:为什么这不编译?

我想实现一些CommandBus可以做到的.DispatchCommandsCommandHandlers

  • A Command是一个简单的DTO,描述了应该发生的事情.例如:"增量计数器减5"
  • A CommandHandler能够处理精确类型Command.
  • CommandBus采取Command和执行CommandHandler即能处理它.

我写的代码不编译.

编译器抱怨cannot convert from 'IncrementHandler' to 'Handler<Command>'.我不明白为什么,因为IncrementHandler实现Handler<Increment>Increment实现Command

我已经尝试了通用接口上的两个inout修饰符,它没有解决问题.

有没有办法只用接口来实现这个目标?

[TestClass]
public class CommandBusTest
{
  [TestMethod]
  public void DispatchesProperly()
  {
    var handler = new IncrementHandler(counter: 0);
    var bus = new CommandBus(handler); // <--Doesn't compile: cannot convert from 'IncrementHandler' to 'Handler<Command>'
    bus.Dispatch(new Increment(5));
    Assert.AreEqual(5, handler.Counter);
  }
}

public …
Run Code Online (Sandbox Code Playgroud)

c# generics covariance contravariance c#-4.0

4
推荐指数
1
解决办法
319
查看次数

标签 统计

c# ×1

c#-4.0 ×1

contravariance ×1

covariance ×1

generics ×1