C#的数组是支持数组协变性的,即允许将子类的数组赋值给父类的数组变量。
这样的功能可能在编译器产生类型不安全的问题,引发类型异常,因为CLR在运行期会根据数组变量在对上找到数据元素,再找到其类型对象,获取到数据的实际元素类型,如果实际元素类型和赋值的变量的类型不同且不是派生关系,那么会造成运行期CLR类型不匹配异常
class Program
{
public static void Main()
{
int[] intArr = {1,2,3,4};
obj objArr = intArr;
objArr[0] = "123"; //可以通过编译,因为“123”是字符串,从OBJECT派生,但是运行时CLR检测出数组实际元素类型时System.Int32,无法进行转换。
}
}
C#数组协变性
本文探讨了C#中数组协变性的概念及其潜在风险,包括类型不安全问题及运行时异常。通过示例说明了当尝试将不兼容类型的值赋给协变数组时可能出现的问题。
181

被折叠的 条评论
为什么被折叠?



