C# var声明变量解析:
在C#3.0中提供了一种新的声明变量的方式,这就是var。

通过这个关键字,在声明变量时就无需指定类型了,变量类型是在初始化时由编译器确定的。代码如下:
var ss = "abcd";
MessageBox.Show(ss.GetType().ToString());

上面的代码将显示System.String,从而证明C#编译器已经将ss编译成了String变量了。

而在输出ss后,再输入“.”后,会看到将String类型变量的相应方法和属性也列出来了,因此可以断定,C#将ss看成了String类型,而不是Object。

所以使用var定义变量同时可以拥有Object和强类型的优点。

不过大家不要将var看成是javascript的var,它们的区别是,javascript是弱类型的语言,而且javascript中的变量(也包括用var声明的变量)可以变换类型,

如下面的javascript所示:
var s = "abcd";
s=3;
alert(s);

上面的代码第一次给s赋了一个字符串,而第二行代码又给赋了一个整数。这样的代码在javascript中没有任何问题。

但在C#3.0中,var变量一但被初始化,确定类型后,就无法改变类型了。如下面的代码是无法编译通过的:
var ss = "abcd";
ss = 44;

综上所述,在使用var定义变量时有以下四个特点:
1. 必须在定义时初始化。也就是必须是var s = “abcd”形式,而不能是如下形式:
var s;
s = “abcd”;
2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。
3. var要求是局部变量。
4. 使用var定义变量和object不同,它在效率上和使用强类型方式定义变量完全一样。

但笔者建议如果事先知道变量的类型,尽量使用强类型方式来声明变量。

否则,就会造成由于大量使用var,而使得开发人员很难断定某个变量是什么类型。这样不利于程序的维护和升级。
虽然var有利有弊,如果将动态语言转换成C#语言,可以考虑使用var来定义变量。

这是因为动态语言没有类型,而要将其转换成强类型的C#语言,就必须给变量指定个类型,但事先确定类型是很费劲的,不如将其指定成var,再由C#编译器去确定变量的具体类型。

那么如果在转换的过程中,发现动态语言的变量改变了类型,该怎么办呢?这个可以使用第三部分要讲的“匿名类”来解决这个问题。

最新文章

  1. 【JUC】JDK1.8源码分析之AbstractQueuedSynchronizer(二)
  2. 团队项目——站立会议DAY7
  3. U3D sorting layer, sort order, order in layer, layer深入辨析
  4. HDU 5592
  5. jacob 操作word
  6. 表复制语句select into from 与 insert into select 区别鉴赏
  7. 关于socket通讯,如何才能高效?
  8. UrlRewriter配置IIS支持伪静态
  9. Luogu P1078 文化之旅
  10. SpringMVC(十二):SpringMVC 处理输出模型数据之@ModelAttribute
  11. FFT快速傅里叶变换算法
  12. numpy, matplotlib库学习笔记
  13. js按照特定的中文字进行排序的方法
  14. Part-Four
  15. Luogu2161 [SHOI2009]会场预约-线段树
  16. Linux上Java的安装与配置
  17. java基础-BigDecimal类常用方法介绍
  18. 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 2、数据框架 和 功能预览
  19. VirtualBox虚拟机克隆方法
  20. Oracle登录失败:监听程序当前无法识别连接描述符中请求的服务

热门文章

  1. poj 1012 & hdu 1443 Joseph(约瑟夫环变形)
  2. 【WEB HTTP】集成点:网关、隧道及中继
  3. 字节流和字符流 in Java
  4. mongodb php 支持
  5. busybox rmmod error — rmmod: chdir(2.6.25): No such file or directory
  6. eclipse修改项目默认编码为UTF-8
  7. DNS 主从同步配置
  8. 主攻ASP.NET.4.5.1 MVC5.0之重生:系统角色与权限(二)
  9. iOS应用适配IPV6
  10. Kubernetes Rook