协方差,委托和泛型类型约束

时间:2012-04-16 12:22:17

标签: c# generics delegates covariance

public void Foo<T>(Func<T> bar)
 where T: IMyInterface
{
   Func<IMyInterface> func = bar;
}

我已经有一段时间了解协方差,但这不应该编译吗?

bar可以返回的任何内容也是IMyInterface。什么似乎是问题?

1 个答案:

答案 0 :(得分:7)

Is this a covariance bug in C# 4?

正确的代码是:

public void Foo<T>(Func<T> bar)
 where T: class, IMyInterface
{
   Func<IMyInterface> func = bar;
}