日期:2014-05-20  浏览次数:20718 次

VS08 新的关键字 var.
08里新增了 var 作为关键字 和LINQ 配合使用很方便
var 是无类型的变量,在编译时,编译器自动根据赋值号右端的值判断变量的类型
例如
C# code
var name;
name = "sinxy";

在编译时,就会为name指定类型为string,并赋值"sinxy";

另外一个新的是 增加了匿名类 也是在编译时指定其类型。

因为LINQ其实就是做了一个数据库中的表和变成语言(例如C#)的一个映射,将表映射为类,将记录映射为类的属性。
那么我们在写LINQ查询数据库时,就相当于对类做操作,如果是一些很复杂的表的结构的查询,而事先不知道查询结果属于什么类型,就可以用匿名类来申明查询结果,而后根据结果指定匿名类的类型。



------解决方案--------------------
楼上的编译恐怕不能通过吧,
var name;
这句话不能推出name是什么类型。
------解决方案--------------------
楼上的理解错了 
当 name = "sinxy"; 才获得类型的.
------解决方案--------------------
强类型也改成弱类型了,C#正在退化
------解决方案--------------------
这个并不是退化。var到底是被什么类型替代并不是到运行时决定的。编译器会给出具体类型。也就是说C#依然不能说变得动态化了。只是看起来像动态语言了一点。
------解决方案--------------------
快赶上VB了
------解决方案--------------------
js
------解决方案--------------------
var name;
name = "sinxy";
-----------
这代码应该编译不过.
我听人说定义一个var变量时应该应该赋值,不能不赋值.

另外,对于什么强类型,什么退化之说,我认为没什么,好用就行,高效就行
------解决方案--------------------
楼主的代码是一定无法通过编译的,至少C# 3.0的编译器还没有智能化到这个程度。
使用var关键字定义的变量,必须是有初始化过程的。而且通过初始化过程还必须能够得到相应的变量的类型,如果无法推测到变量的类型,也无法通过编译!

首先可以肯定的一点是,C#仍然是强类型的而不是弱类型的。所谓的强类型,按我的理解是:一个变量对应一个固定的类型,在变量名的整个可见空间内不变化。而弱类型,则是可以变化的。

就这一点来说,尽管使用了关键字var,但变量的类型是在编译时即已获得并且固定下来,不会发生变化。所以C#仍然是强类型的。上述的代码,正确的方式应当是:
var name="sinxy";
而它完全等人于
string name="sinxy";
其实这种技术在编译器中经常用到,比如在进行函数调用时,编译器往往插入一些指令用于异常处理等。
就语言来说我觉得强类型与弱类型并无高低之分,没有Javascript,AJAX也需要用一种类似的语言来承担它的责任,同样没有C#也不行。 但是C#正在越来越多的加入一些动态语言的元素,这一点倒是真的!
------解决方案--------------------
肯定编译不过,
应该 var name="sinxy"; 

------解决方案--------------------
C# 3.0吸收到了很多JS的语法特点
------解决方案--------------------
还是强类型 只是写法的问题
------解决方案--------------------
楼主标题起错了,不该叫“VS08 新的关键字 var ”,
应叫“.net3.5 新的关键字 var ”
------解决方案--------------------
是C#3.0的新特性
------解决方案--------------------
var 并非为普通的弱类型。。。。。。
------解决方案--------------------
object 的智能型
------解决方案--------------------
It is important to understand that the var keyword does not mean “Variant” and does not indicate that the variable is loosely typed, or late-bound。
-------------------------------------------------------

lz代码肯定错了。用var定义变量时必须出初始化。
c#里var和js里面的var是不一样的。
感觉c#是用来对付匿名类型和LINQ的
------解决方案--------------------
用var定义变量 var name; 
那.net中默认给的值和类型是什么