gpt4 book ai didi

.net-4.0 - 为什么协变类型参数不允许我编写 [List lst = new List()]?
转载 作者:行者123 更新时间:2023-12-02 14:42:26 24 4
gpt4 key购买 nike

如果Covariant .Net Framework 4 中添加的类型参数使我能够进行看起来像多态性的赋值

为什么我会写

IEnumerable<object> lst = new List<string>();

我不会写

List<object> lst = new List<string>();

最佳答案

它不起作用有两个原因:

  • IEnumerable<T>是协变的(声明为 public interface IEnumerable<out T> ),但是 IList<T>不是。否则你可以做这样的事情:

    IList<string> listOfStrings = ...
    IList<object> listOfObjects = listOfStrings;
    listOfObjects.Add(42); // would fail at runtime because it is actually a list of strings, not ints
  • 协变和逆变仅适用于接口(interface),不适用于具体类

From MSDN :

In the .NET Framework version 4, variant type parameters are restricted to generic interface and generic delegate types.

关于.net-4.0 - 为什么协变类型参数不允许我编写 [List<object> lst = new List<string>()]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3571132/

24 4 0