我相信在C#文档的这一部分上有一个小错误!但我不确定。这真的是文档错误吗?还是我错了?
而不是:
Xi是反变体或不变的,Ai是输入安全的。
它应该是:
Xi是逆反式或不变式,Ai是输入-不安全。
// test code 1
interface I1<out T>{ // T is covariant -> input-UNsafe
I2<T> test1(); // error, I2<T> is output-unsafe! which proves my point
}
interface I2<in P> { } // P is contravariant!我正在使用VisualStudio16.7.2,控制台应用程序(.Net框架) C# 7.3
发布于 2020-08-19 15:25:07
这是C# 6草案标准(目前在learn.microsoft.com上发布)中的一个缺陷。它已被定为标准化进程的一部分。你可以在官方的C# 5.0标准中看到
发布于 2020-08-19 08:42:00
您是对的,这很可能是文档中的一个错误。
除了你问题中的推理链,这是完全有意义的,我还有另一个(直觉)论点支持这是一个错误:
让我们比较输出定义的最后两行--不安全的 (A):
在input-unsafe (B)定义的最后两行:
在C#中,输入和输出安全(以及协方差和反向方差)是对称的.因此,这两个定义也应该是对称的,但它们不是:
A B
Line 1 "output-unsafe" "input-unsafe"
Line 2 "input-safe" "output-unsafe"
^
|
+--- strange outlier你的修正建议也能解决这个问题。
https://stackoverflow.com/questions/63480764
复制相似问题