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

在.NET Framework 4.0中键入差异

  •  6
  • UserControl  · 技术社区  · 16 年前

    IEnumerable<T> , IComparable<T> 还有一些现在是类型变体。 IList<T> , ICollection<T> 还有很多人没有。为什么?

    3 回复  |  直到 16 年前
        1
  •  11
  •   Mehrdad Afshari    16 年前

    .NET Framework 4.0引入 安全的 协变/反变。 IList<T> ICollection<T> T 同时在输入和输出位置 IEnumerable<T> T 仅在输出位置 IComparable<T> T 仅在输入位置 .

    假定 ILIST & T;T & GT; 支持的类型差异:

    static void FailingMethod(IList<object> list) {
        list[0] = 5;
    }
    
    static void Test() {
        var a = new List<string>();
        a[0] = "hello";
        FailingMethod(a); // if it was variant, this method call would be unsafe
    }
    
        2
  •  2
  •   Marc Gravell    16 年前
        3
  •  1
  •   Robert Harvey    16 年前

    Anders Hejlseberg在他的演讲“C的未来”中有一个简短但富有启发性的讨论,描述了协变/逆变。他对协变和逆变的讨论从演讲开始的50分17秒开始。

    http://channel9.msdn.com/pdc2008/TL16/

    推荐文章