观《深入理解C#》有感---泛型可变性的缺乏
泛型不支持协变性,数组支持,举个例子:

要注意如下代码:
animals2[0] = new Dog();
虽然编译能够通过,但运行后就会报错。本书中,作者给了它俩支持协变性的不同原因,以下是原话叙述。
泛型:泛型的设计者认为,这比编译时就失败还要糟糕——静态类型的全部意义就在于在代码运行之前找出错误。
数组:设计者希望能面向尽可能多的用户,为此采取的策略之一就是允许支持从Java中编译来的代码,换句话说,.NET之所以有协变数组,是因为Java有协变数组——虽然这个功能在Java中是一个公认的“瑕疵”

浙公网安备 33010602011771号