【发布时间】:2018-04-27 01:03:05
【问题描述】:
我想知道为什么这样的事情毕竟是允许的?
interface IProducer<out T> where T : struct
如果 struct 是值类型,则协方差不起作用,因为 struct 是值类型。我在这里想念什么?
【问题讨论】:
-
可以考虑Vacuously true。请记住,编译器的目的是生成有用的程序——而不是纯粹的数学程序——因此有时它可能允许你做出包含冗余或废话的“陈述”。
-
"out T" 在这种情况下会阻止在该接口上声明某些成员(如
void Set(T value);),所以你不能说它完全没用或没有效果。 -
是有道理的,所以它的两个独立的规则相互不依赖,但是这两个规则相交在定义上产生了自相矛盾。感谢您的回答,如果您可以将其作为答案,我会接受。
标签: c# struct covariance value-type