运行期CLR校验数组元素赋值类型安全性

C#数组协变性
本文探讨了C#中数组协变性的概念及其潜在风险,包括类型不安全问题及运行时异常。通过示例说明了当尝试将不兼容类型的值赋给协变数组时可能出现的问题。

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,无法进行转换。
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值