[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——详细示例解析
从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...
- 【C#】隐式类型var
在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...
- C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法
1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...
- linq和隐式类型var
隐式类型 var 强类型,声明的时候必须给变量赋值,编译器会根据值来确定其类型.只能出现在局部变量或脚本代码中. 使用范围: 简单类型:如int string等 复杂类型:如数组.类等 逻辑语句:fo ...
- C# var 隐式类型 var 用法 特点
var 关键字是C# 3.0 开始,在方法范围中声明的变量: var有以下特点: * 1.var在编译器编译的时候根据初始值推断出其的类型 * 2.不能赋值除了初始值类型之外的其他类 ...
- C#3.0新增功能03 隐式类型本地变量
连载目录 [已更新最新开发文章,点击查看详细] 从 Visual C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var. 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但 ...
- C#语法糖之第一篇:自动属性&隐式类型
今天给大家分享一下C#语法糖的简单的两个知识点吧. 自动属性:在 C# 4.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁. 客户端代码还可通过这些属性创建对象 ...
- C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数
一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...
- .NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器
开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也 ...
随机推荐
- 解决Android单个dex文件不能超过65535个方法问题
一.找坑:谷歌规定单个dex文件中的方法不能超过65536的限制 我们编写项目过程中在工程的lib文件夹下引用的第三方插件jar包太多或者项目过大,编译运行时就有可能报出com.android.dex ...
- VS 在代码中括号总是跟着类型后面
if (OK.Text.Contains("运费")) {// 像这样子,这个大括号不是直接在IF下,而是跟在后面 工具-->选项-->文本编辑器-->C# -- ...
- Js中的4个事件
除了加载文档的事件onload和鼠标相关的一些事件如onclick,onmouseover等.js还有一些相对不常用的事件,这些事件也有各自的应用场景,本文就介绍 onkeydown,oncontex ...
- java操作Excel的poi的简介
一.POI概述 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 结构: HSSF - 提供读写Mi ...
- atom安装与插件配置
下载:https://atom.io 安装 必备插件安装步骤: File-->settings-->Install-->Install Packages下面的输入框中输入要安装的插件 ...
- windows 命令行 for 用法
for /r 目录名 %i in (匹配模式1,匹配模式2) do @echo %i for /r SATA %i in (*.txt) do @echo %i D:\REY\test>for ...
- JS 猴子
公园里有一只猴子和一堆桃子,猴子每天吃掉桃子总数的一半,把剩下一半中扔掉一个坏的. 到第七天的时候,猴子睁开眼发现只剩下一个桃子.问公园里刚开始有多少个桃子? <!DOCTYPE html> ...
- Linux内核crash/Oops异常定位分析方法
在内核开发的过程中,经常会碰到内核崩溃,比如空指针异常,内存访问越界.通常我们只能靠崩溃之后打印出的异常调用栈信息来定位crash的位置和原因.总结下分析的方法和步骤. 通常oops发生之后,会在串口 ...
- WSDL实例解析
WSDL的主要文档元素 WSDL文档可以分为两部分.顶部分由抽象定义组成,而底部分则由具体描述组成.抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随 机器或语言而变的元素.这就定义 ...
- ELK介绍及搭建 Elasticsearch 分布式集群
上:https://blog.51cto.com/zero01/2079879 下:https://blog.51cto.com/zero01/2082794