C#中的隐式类型var——详细示例解析
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var。隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出。
下面就让我来总结下隐式类型的一些特点:
1.var类型会被编译器根据初始值的类型推断出具体的类型
eg:
var t="test";//var会被推断为string类型
var p=new Person();//已知Person为一个已定义好的类,编译完成后代码会变成: Person p =new Person();
2.var类型的局部变量必须赋予初始值
eg:
var t=;//正确,t会被推断为int类型,值为1
var t;//报错:隐式类型的局部变量必须已初始化
3.无法将null赋值给隐式类型的局部变量
eg:
var t=null;//报错:无法将"<null>"赋予隐式类型的局部变量
4.var类型变量的定义必须是在方法中或者在属性get、set访问器中
eg:
public void Test()
{
var t="test";//正确
} public string Name
{
get
{
var p = new Person();//正确 return p.Name;
}
} class Program
{
var t = ;//报错:上下文关键字"var"只能出现在局部变量声明中
}
5.var不能用作方法的参数
eg:
public void Test(var t){}//报错:上下文关键字"var"只能出现在局部变量声明中
6.不能当做返回值类型
eg:
public var Test(){}//报错:并非所有代码路径都返回值 或者:上下文关键字"var"只能出现在局部变量声明中
7.语句中只声明一次变量,声明后不能更改类型
eg:
var t="";
t=;//报错:无法将类型"int"隐式转换为"string"
8.初始化不能是一个匿名方法(也叫匿名委托、匿名函数,通俗上可以这样说,并非官方的规范,后续博文讲匿名方法的会顺带提一下)
eg:
var t = delegate(int i) { return i; };//报错:无法将"匿名方法"赋予隐式类型的局部变量
9.可以用匿名类初始化
eg:
var person = new { Age = , Name = "Kobe" };//正确
//匿名类中的属性一定要赋初始值,否则报错
var person = new { Age, Name };//报错:当前上下文中不存在"Age" 当前上下文中不存在"Name"
使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样,因为还没运行时编译器就已经根据上下文推断出是什么类型了,所以要比object效率要高。善用隐式类型,在难以确定类型的情况下如将用于存储匿名类型或匿名类型集合时使用会有奇效,在新语法中的使用颇多,是一把编程利器。
C#中的隐式类型var——详细示例解析的更多相关文章
- C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法
1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...
- javascript中的隐式类型转化
javascript中的隐式类型转化 #隐式转换 ## "+" 字符串和数字 如果某个操作数是字符串或者能够通过以下步骤转换为字符串的话,+将进行拼接操作. 如果其中一个操作数是对 ...
- [C#] 隐式类型var —— 示例解析
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...
- linq和隐式类型var
隐式类型 var 强类型,声明的时候必须给变量赋值,编译器会根据值来确定其类型.只能出现在局部变量或脚本代码中. 使用范围: 简单类型:如int string等 复杂类型:如数组.类等 逻辑语句:fo ...
- 【C#】隐式类型var
在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...
- C# var 隐式类型 var 用法 特点
var 关键字是C# 3.0 开始,在方法范围中声明的变量: var有以下特点: * 1.var在编译器编译的时候根据初始值推断出其的类型 * 2.不能赋值除了初始值类型之外的其他类 ...
- .NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器
开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也 ...
- C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...
- C#3.0新增功能03 隐式类型本地变量
连载目录 [已更新最新开发文章,点击查看详细] 从 Visual C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var. 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但 ...
随机推荐
- 关于SQL的相关笔记【长期更新,只发一帖】
场景[1]多表联查时,主表与关联表同时与同一张(第三张表)有关联,类似三角恋关系- - 涉及表: HOUSE:记录了房屋信息 ROOMS:记录了房间信息 HOUSE_STATUS:记录了状态信息的中文 ...
- easyui datagrid 悬浮事件
easyui的单元格提示窗体 鼠标悬浮事件 function findAllPreven() { var infoname = $('#area').val(); areadatagrid=$('# ...
- 【转】一千行MySQL学习笔记
/* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ ...
- [译]IIS 8.0应用初始化
原文 代码 或者点这 通过IIS 8.0应用初始化特性管理员可以配置IIS为一个网站或多个网站提前执行初始化任务.当应用在初始化期间,可以通过配置先返回一个静态页面知道应用的初始化任务完成. 通过配置 ...
- 【IOS】将字体大小不同的文字底部对齐
从WP转IOS了,还是放不下...... 在项目中,要实现如图多个不同大小的文字 底部对齐的效果 像下面这样: (想要的效果) 以为用三个UIFont不同的UILabel 之后让他们底部对齐 ...
- D3.js学习(二)
上一节中我们已经画出了一个基本的图表,不过忘了给坐标轴添加标签了,所以在本节中我们要给坐标轴加上标签,目标效果如下 给X轴添加标签 很明显,标签是不是一个text内容块啊,所以我们只要在svg中添加一 ...
- eclipse安装spring的插件
第一步:插件下载 http://spring.io/tools/sts/all 安装包链接 第二步:插件安装 第三步:安装成功检测
- php 全局变量
参考链接:http://www.cnblogs.com/borage/p/3645285.html
- Open xml 操作Excel 透视表(Pivot table)-- 实现Excel多语言报表
我的一个ERP项目中,客户希望使用Excel Pivot table 做分析报表. ERP 从数据库中读出数据,导出到Excel中的数据源表(统一命名为Data),刷新Pivot table! 客户还 ...
- 优先队列实现Huffman编码
首先把所有的字符加入到优先队列,然后每次弹出两个结点,用这两个结点作为左右孩子,构造一个子树,子树的跟结点的权值为左右孩子的权值的和,然后将子树插入到优先队列,重复这个步骤,直到优先队列中只有一个结点 ...