none
VS2010创建项目选取.net framework2.0的环境为什么还可以使用var关键字 RRS feed

答案

  • 在C#3中,var是新的关键字,让我们定义一个不确定类型的新变量。我们赋予变量的类型将会是值类型。

    这个代码也将会工作在VS2008的.net2.0项目下。还是因为他的编译代码。如果我们反射程序集,我们将会看到:

    我们能够在.net2.0项目下使用这个特性,仅仅因为这是编译器的作用。实际上,“var”仅仅告诉编译器替换它的位置用我们使用的值类型。

    欲见详情,请看此处:http://weblogs.asp.net/shahar/archive/2008/01/23/use-c-3-features-from-c-2-and-net-2-0-code.aspx(英文版)

    2010年5月5日 8:28
    版主
  • 你好!

         这个是正常的现象,我详细解释一下!

         托管代码(例如C# 代码)会被编译器编译成IL代码,真正运行在运行时上的是IL代码!你设置的目标平台版本只可以保证你的IL代码可以正常的运行在那个版本上,并不能检查你的C# 代码是否完全符合C#2.0的规范,因为编译时使用的还是C#4.0编译器。

         下面说说var,这个关键字只是语法上的新特性,编译完的IL代码和过去没有区别,这样的特性俗称“语法糖”,只是语法上用起来比较甜蜜,而实际上没有什么区别!所以即使你的代码中有var,那还是可以运行在旧版本的.NET Framework上!

         当然,如果你使用的的新特性是本质上的改变,那就无法通过编译了!


    周雪峰
    2010年5月5日 9:27
    版主

全部回复

  • var是implicit type,自从3.0就被编译器识别,和选择的.net framework2.0环境没关系。你在vs2008, vs2010上都没问题,不过在vs2003上就会出问题了。

    • 已编辑 络绎 2010年5月5日 8:15 Update some errors
    2010年5月5日 8:12
  • 在C#3中,var是新的关键字,让我们定义一个不确定类型的新变量。我们赋予变量的类型将会是值类型。

    这个代码也将会工作在VS2008的.net2.0项目下。还是因为他的编译代码。如果我们反射程序集,我们将会看到:

    我们能够在.net2.0项目下使用这个特性,仅仅因为这是编译器的作用。实际上,“var”仅仅告诉编译器替换它的位置用我们使用的值类型。

    欲见详情,请看此处:http://weblogs.asp.net/shahar/archive/2008/01/23/use-c-3-features-from-c-2-and-net-2-0-code.aspx(英文版)

    2010年5月5日 8:28
    版主
  • 你好!

         这个是正常的现象,我详细解释一下!

         托管代码(例如C# 代码)会被编译器编译成IL代码,真正运行在运行时上的是IL代码!你设置的目标平台版本只可以保证你的IL代码可以正常的运行在那个版本上,并不能检查你的C# 代码是否完全符合C#2.0的规范,因为编译时使用的还是C#4.0编译器。

         下面说说var,这个关键字只是语法上的新特性,编译完的IL代码和过去没有区别,这样的特性俗称“语法糖”,只是语法上用起来比较甜蜜,而实际上没有什么区别!所以即使你的代码中有var,那还是可以运行在旧版本的.NET Framework上!

         当然,如果你使用的的新特性是本质上的改变,那就无法通过编译了!


    周雪峰
    2010年5月5日 9:27
    版主