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. 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但 ...
随机推荐
- Android 热修复方案Tinker
转自:http://blog.csdn.net/l2show/article/details/53925543 Android 热修复方案Tinker(一) Application改造 Android ...
- 后台动态添加的button,如何触发button_click事件?
后台动态添加的button,需要在Page_Load或者Page_Init重新动态生成才能执行button_click public Panel GetContrlType() { Panel pan ...
- 同步(Synchronous)和异步(Asynchronous)
目录 概念性 图示例 举个例子 回到顶部 概念性 同步和异步通常用来形容一次方法调用. 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. 异步方法调用更像一个消息传递,一旦开始 ...
- [Objective-c开源库]HHRouter
---恢复内容开始--- 目的 统一客户端内部和外部跳转处理,支持传参数 代码 添加vc,block映射 针对路径做映射,如/user/:userId -> UserViewController ...
- 五大主流浏览器 CSS3 和 HTML5 兼容性大比拼
各大主流浏览器对 CSS3 和 HTML5 的支持越来越完善,曾经让多少前端开发人员心碎的IE系也开始拥抱标准.就在前几天,W3C的 HTML5 社区领袖 Shelley 宣布,HTML5的开发工作已 ...
- Set集合的使用
#include<iostream> #include<set> using namespace std; typedef struct { int i,j; char s; ...
- IOS与Android APP界面设计规范要点
IOS篇 一.尺寸及分辨率 iPhone界面尺寸:320*480.640*960.640*1136 iPhone6:4.7英寸(1334×750),iPhone6 Plus:5.5英寸(1920×10 ...
- 使用svn分支
使用svn分支 原文: https://my.oschina.net/cobish/blog/652984
- QSS的应用
1.在同一级别的widget中,如果指定widget有设置样式表,则在qss对该样式表的设置无效,对比验证: (StatusWidget未设置widget样式--运行截图) (StatusWidget ...
- Eclipse 各版本版本号代号对应一览表
版本号 代号 日期 Eclipse 3.1 IO [木卫一,伊奥] 2005 Eclipse 3.2 Callisto [木卫四,卡里斯托] 2006 Eclipse 3.3 Eruopa ...