博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
隐式类型
阅读量:5314 次
发布时间:2019-06-14

本文共 821 字,大约阅读时间需要 2 分钟。

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

你可能感兴趣的文章
HTTP状态码
查看>>
iOS如何过滤掉文本中特殊字符
查看>>
基础学习:C#中float的取值范围和精度
查看>>
MongoDB-CRUD
查看>>
javaagent 简介
查看>>
python升级安装后的yum的修复
查看>>
Vim配置Node.js开发工具
查看>>
web前端面试题2017
查看>>
ELMAH——可插拔错误日志工具
查看>>
MySQL学习笔记(四)
查看>>
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
两数和
查看>>
移动设备和SharePoint 2013 - 第3部分:推送通知
查看>>
SOPC Builder中SystemID
查看>>
MySQL数据库备份工具mysqldump的使用(转)
查看>>
NTP服务器配置
查看>>
【转】OO无双的blocking/non-blocking执行时刻
查看>>
ul li剧中对齐
查看>>
关于 linux 的 limit 的设置
查看>>
HDU(4528),BFS,2013腾讯编程马拉松初赛第五场(3月25日)
查看>>