从 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 —— 示例解析的更多相关文章

  1. C#中的隐式类型var——详细示例解析

    从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,它的具体类型由编译器根据上下文推断而出. 下面就让我来总结下隐式类型的一些特点: 1.va ...

  2. 【C#】隐式类型var

    在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...

  3. C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法

    1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...

  4. linq和隐式类型var

    隐式类型 var 强类型,声明的时候必须给变量赋值,编译器会根据值来确定其类型.只能出现在局部变量或脚本代码中. 使用范围: 简单类型:如int string等 复杂类型:如数组.类等 逻辑语句:fo ...

  5. C# var 隐式类型 var 用法 特点

    var 关键字是C# 3.0 开始,在方法范围中声明的变量: var有以下特点: * 1.var在编译器编译的时候根据初始值推断出其的类型          * 2.不能赋值除了初始值类型之外的其他类 ...

  6. C#3.0新增功能03 隐式类型本地变量

    连载目录    [已更新最新开发文章,点击查看详细] 从 Visual C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var. 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但 ...

  7. C#语法糖之第一篇:自动属性&隐式类型

    今天给大家分享一下C#语法糖的简单的两个知识点吧. 自动属性:在 C# 4.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁. 客户端代码还可通过这些属性创建对象 ...

  8. C#3.0新特性:隐式类型、扩展方法、自动实现属性,对象/集合初始值设定、匿名类型、Lambda,Linq,表达式树、可选参数与命名参数

    一.隐式类型var 从 Visual C# 3.0 开始,在方法范围中声明的变量可以具有隐式类型var.隐式类型可以替代任何类型,编译器自动推断类型. 1.var类型的局部变量必须赋予初始值,包括匿名 ...

  9. .NET中那些所谓的新语法之一:自动属性、隐式类型、命名参数与自动初始化器

    开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法,它们相对以前的老语法相比,做了很多的改进,简化了很多繁杂的代码格式,也大大减少了我们这些菜鸟码农的代码量.但是,在开心欢乐之余,我们也 ...

随机推荐

  1. 【原创】打印GC log

    -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:c:/gc.log

  2. vs中的正则替换

    老版本: String {\w+} => Public String \1 2012中: String (\w+) => Public String $1

  3. I/O多路复用技术

    典型应用于以下场合 1.处理多个描述字时,比如同时处理套接字和磁盘IO.终端IO 2.一个客户同时处理多个套接字 3.服务器既要处理监听套接字,又要处理已连接套接字 4.既要处理TCP.也要处理UDP ...

  4. (转)shiro权限框架详解05-shiro授权

    http://blog.csdn.net/facekbook/article/details/54910606 本文介绍 授权流程 授权方式 授权测试 自定义授权realm 授权流程 开始构造Secu ...

  5. 关于layui 三级联动 渲染报错解决方法

    /** * 时间:2016年11月27日 * 作者:707200833 * 说明:依赖与jQuery和layui, 是基于layui开发的一个省市区联动的小插件, 使用上要基于layui的表单进行使用 ...

  6. 【leecode】小练习(简单8题)

    def twoSum(nums, target): """ 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[ ...

  7. 【leecode】宝石与石头

    给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母 ...

  8. 前端开发—CSS 盒子、浮动、定位

    盒子模型 margin padding border content margin:            用于控制元素与元素之间的距离:body自带 8 像素的margin 需要手动去除.(快递盒之 ...

  9. keepalived+mysql主主实现高可用

    mysql主从配置参考我的上篇博客 主主配置就是互为主从 环境 准备应用 keepalived-2.0.2.tar.gz openssl-devel-1.0.2k-12.el7.x86_64.rpm ...

  10. 微电影《Junior·BQB》——剧本

    电影名称:<Junior——BQB> 组长: 组员: 导演: 副导演: 分镜/演出: 编剧: 主演: 彬彬:比丘 阿伟:魔女(彬彬姐) 小怪:怪物团长 客串 旁白 友情演出: 恶俗之王 摄 ...