41得票2回答
C#类型参数的变异注释,限制为值类型

在C#中,可以为类型参数添加方差注释,限定为值类型: interface IFoo<in T> where T : struct { void Boo(T x); } 为什么编译器允许这种情况下的方差注释,如果它完全没有意义?

39得票1回答
ValueTuple为什么是协变的?

这在C# 7.3 (Framework 4.8)中可以正确编译: (string, string) s = ("a", "b"); (object, string) o = s; 我知道这是以下代码的语法糖,而且以下代码也可以正确编译: ValueTuple<string, st...

38得票2回答
这是C# 4中的协变性错误吗?

在下面的代码片段中,我期望能够从elements隐式转换为baseElements,因为TBase可以隐式转换为IBase。 public interface IBase { } public interface IDerived : IBase { } public class Varia...

37得票7回答
为什么这个通用扩展方法无法编译?

这段代码有点奇怪,请耐心阅读(请记住,这种情况确实在生产代码中出现过)。 假设我有以下接口结构: public interface IBase { } public interface IChild : IBase { } public interface IFoo<out T...

37得票5回答
为什么 Function[-A1,...,+B] 不允许任何超类型作为参数?

我认为协变性(至少对于对象而言)可以定义为“能够使用一个更窄(子)类型的值来代替一些更宽(超)类型的值的能力”,而逆变性则是其完全相反。 显然,Scala函数是Function[-A1,...,+B]的实例,用于逆变参数类型A1等等和协变返回类型B。虽然这对于函数的子类型很方便,但按照上述定...

37得票7回答
在C#中使字典只读

我有一个 Dictionary<string, List<string>>,想将其成员公开为只读。我看到可以将其作为 IReadOnlyDictionary<string, List<string>> 返回,但我无法弄清如何将其作为 IReadO...

37得票4回答
.NET 4.0中的协变和逆变错误

C# 4.0的协变和逆变支持存在一些奇怪的行为:using System; class Program { static void Foo(object x) { } static void Main() { Action<string> action = _ =...

36得票6回答
C++协变性何时是最佳解决方案?

这个问题 几小时前在这里被提出,让我意识到我从来没有在我的代码中使用过协变返回类型。对于那些不确定 covariance 是什么的人,它允许 (通常是) 虚函数的返回类型不同,只要这些类型是同一继承层次结构的一部分。例如:struct A { virtual ~A(); virtu...

36得票6回答
为什么不能将 List<MyClass> 强制转换为 List<object>?

我有一个对象列表,它们是我的类型QuoteHeader,我想将这个列表作为对象列表传递给能够接受List&lt;object&gt;的方法。 我的代码如下...Tools.MyMethod((List&lt;object&gt;)MyListOfQuoteHeaders); 但是在设计时我收...

35得票4回答
编程语言中协变和逆变有什么区别?

有人能够解释编程语言理论中协变性和逆变性的概念吗?