代码之家  ›  专栏  ›  技术社区  ›  Timwi

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

  •  6
  • Timwi  · 技术社区  · 14 年前

    然而,现在它结束了,我又回到了写普通的,日常的,无聊的代码,我开始怀疑:我用过它吗?我注意到我并没有有意识地使用它。此后我定义的接口或委托都没有从中受益。

    只有 X 是基类 Y 是它的后代:

    if (enumerableOfYs.Contains(variableOfTypeX))
    

    有没有什么有趣或令人兴奋的例子,你们中的任何人在一个真实的、非人为的用例中使用了协方差或逆方差,并且它通过惊人的正确性而真正挽救了一天?

    4 回复  |  直到 14 年前
        1
  •  9
  •   Eric Lippert    14 年前

    我在为客户编写程序的过程中遇到的唯一“真实世界”的差异用法(与编写编译器测试用例或文章或其他东西不同)是我现在可以通过 IEnumerable<TypeParameterDefinedInSource> IEnumerable<TypeSymbol> 当我用C语言编写代码分析工具时。

    这真的不是一个“拯救一天”的功能。这更像是一个“它的工作方式我期待它”的功能。

        2
  •  3
  •   kbrimington    14 年前

    我特别感谢埃里克在第二段视频结尾讨论 他预计用户会使用这个功能。他指出,大多数业务线应用程序开发人员可能不会创建许多使用协方差或逆方差的接口,但更可能是框架开发人员的角色(当然包括您自己的框架)。

    IEnumerable<DerivedClass> IEnumerable<BaseClass> 而不是我自己跳投。最终,我可能会忘记我做不到的事,我认为这将是协方差/反方差最引人注目和最常见的用法:超微妙的东西 只是工作

        3
  •  1
  •   tster    14 年前

    像协方差和逆方差这样的特性并不能真正“省事”。相反,如果使用正确,它们会使以后的维护更容易。这样,它就像C++中的const正确性。它并没有增加任何功能,但是正确编写的代码使用了它,使系统更易于使用。

        4
  •  0
  •   Brian    14 年前

    我用C#大约三年了,我只记得曾经“丢失”过的方差特征,可能只有一两次。

    有可能现在它们已经在语言中了,我会找到更多的机会来利用它们,但我确实认为它们充其量只是“次要”的特性。

    (我很想看看这里还有什么答案。)