C#4.0中协方差和逆变的良好,真实用例的例子?

Tim*_*mwi 6 c# use-case covariance contravariance

在C#4.0问世之前,我对协方差和逆变感到非常兴奋.它迎合了我对理论正确性的喜爱!

然而,既然已经出局了,我又回到了写正常,日常,无聊的代码,我开始怀疑:我曾经使用它吗?我注意到我并没有有意识地使用它.我之后定义的接口或代理都没有从中受益.

只有一个案例我后来发现我不知不觉地使用了协方差,但它非常微妙,我也没有注意到它.Imagine X是一个基类,Y是它的后代:

if (enumerableOfYs.Contains(variableOfTypeX))
Run Code Online (Sandbox Code Playgroud)

有没有任何有趣或令人兴奋的例子,你们中的任何一个人在现实生活中,非人为的用例中使用了协方差或逆变,它真的通过非常"正确"来挽救了这一天?

Eri*_*ert 9

我在实际的客户编写程序(与编写编译器测试用例或文章或其他任何东西相反)中遇到的唯一"现实世界"方差的使用是我现在可以传递IEnumerable<TypeParameterDefinedInSource>给期望的方法IEnumerable<TypeSymbol>当我用C#编写代码分析工具时.

这真的不是一种"拯救一天"的功能.它更像是"它按照我期望的方式工作"功能.

  • @Timwi:我们根据一系列竞争标准对功能进行优先排序,包括实施难度,与其他功能一起使用或与之相对应的因素,是否适合发布的更广泛主题等等.方差很容易; 我们知道如何实现它,它已经在CLR中得到支持,我们非常了解该理论并且它消除了一直报告的真正的客户问题.一个更大的功能会从制作"动态"工作中夺走太多资源,这是发布的高位. (3认同)