zoukankan      html  css  js  c++  java
  • C#:关于C#4中IEnumerable<out T>的理解

    IEnumerable<out T>这个接口非常常见,它是最基础的泛型集合接口,表示可迭代的项的序列。

    但是奇怪的是为什么泛型参数要带一个“out”?

    经过一番资料查阅后,发现此“out”和C#中的“out”类型参数的“out”并非一个意思。

    IEnumerable<out T>中的out表示这个接口支持“协变性”。

    何谓“协变性”?

    简单的理解就是“T”可以变化为T的基类型。说了这么多,感觉还是很抽象,用一段代码表示吧。

    IEnumerable<int> collection1 = new List<string>();
    IEnumerable<object> collection2 = collection1;

     在C#4.0之前,由于IEnumerable<T>的声明并未包含“out”关键字,所以上面的代码是无法通过编译的,编译器会告知你类型转换失败,因为collection2对应的类型为IEnumerable<object>,而collection1对应的类型为IEnumerable<int>。其实这个问题并不是多么深刻,因为现在绝大部分C#开发者用的都是C# 5,就会很“理所当然”的觉得collection1可以转化为collection2。我也是,直至查阅资料研究“out”这个关键字才发现之所以可以实现这样转换的原因。




    转载声明:本文转载自http://www.zhoumy.cn/?id=5
  • 相关阅读:
    ARC071F Infinite Sequence
    AGC043C Giant Graph
    ARC006E Addition and Subtraction Hard
    Codechef BALNET Balancing Network Revisited
    Gym102055H Game on the Tree
    Luogu P5320 [BJOI2019]勘破神机
    cookie和session
    jsp介绍
    request请求转换成对象。
    域对象 request
  • 原文地址:https://www.cnblogs.com/DoNetCoder/p/4083778.html
Copyright © 2011-2022 走看看