我正在研究C#中的协方差和逆变。
我已经了解了很多,但我正在寻找更多技术细节。我理解,由于数组协方差,我可以隐式地将string [] array = new string[1]
强制转换为object [] moreGeneralArray = array
。
在此数组中存储int
将抛出ArrayTypeMismatchException
。
我正在研究如何检查这些技术细节?似乎隐藏在object []
类型后面的某种类型告诉运行时它实际上是一个字符串数组?
答案 0 :(得分:1)
当您隐式地将string[]
类型的对象强制转换为object[]
时,后备存储仍为string[]
类型。
根据Eric Lippert的说法,这种特殊的协方差被打破了。他说'它被添加到CLR中,因为Java需要它,而CLR设计者希望能够支持类似Java的语言。'