隐式类型

1 定义

   我们可以使用var关键字来定义隐式类型的变量或者数组:

            //定义基本类型
            var i = 23;
            var str = "hello!";
            
            //定义数组
            var arr = new[] { "小明","小李","小赵"};

            //自定义类型
            var p = new Person() { Name="wjw",Age=26};

   可以看出,关键字var可以用来定义各种类型的变量,但是使用隐式类型后,编译器到底为隐式类型的变量做了什么附加操作呢?

2 本质分析

         通过查看编译后的IL代码,如下图

 

         

       从反编译的代码中,可知编译器在编译时期,如果遇到隐式类型的变量时,将根据其等号右边的值的类型来推算该变量本身的实际类型,然后用真实的数据类型替换var

 这个过程由编译器在编译时期自动完成。

       当我们不确定赋值变量的数据类型的时候,就可以使用var,这样就有可能避免类型转换,比如有可能发生装箱 拆箱,从而引起性能

3 注意事项

     (1) 声明的同时必须初始化,因为编译时要根据初始化值类型来推断var

     (2)使用var定义个变量后,将不能修改数据类型,因为初始化的时候已经确定var数据类型了

          比如var i=10,i="hello" 出现错误:

         无法将类型“string”隐式转换为“int” F:\基础学习\mvc基础知识\02 新语法\02 隐士类型\Program.cs 16 17 02 隐士类型

     (3)var 定义的变量只能作为方法局部变量使用。类的成员字段、方法的形参和返回值都不能使用!因为无法编译时确定他们的类型!

     (4)初始化表达式不能是匿名函数和null。

 

转载于:https://www.cnblogs.com/never-giveUp/p/4056571.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值