.NET9引用数组协变怪异Bug
💡
原文中文,约6400字,阅读约需16分钟。
📝
内容提要
引用类型数组的协变允许用子类替代父类,但可能导致运行时异常。例如,Giraffe数组可以存放Giraffe实例,但若存放Turtle实例则会引发异常。CLR在赋值时进行类型检查,增加了性能开销。此问题在.NET9中仍未得到合理解决。
🎯
关键要点
-
引用类型数组的协变允许用子类替代父类,但可能导致运行时异常。
-
Giraffe数组可以存放Giraffe实例,但若存放Turtle实例则会引发异常。
-
CLR在赋值时进行类型检查,增加了性能开销。
-
在.NET9中,协变问题仍未得到合理解决。
-
不正常的赋值操作在前端编译层面合法,但在运行时会导致异常。
-
CLR的类型检查在大量赋值时会造成性能损耗。
-
StelemRef函数负责检查引用数组类型,确保类型有效。
-
不合理的设计在计算机技术中普遍存在,导致后期需要大量精力去弥补。
-
中国的汉字在设计上相对稳定,适应时代变化的能力较强。
➡️