前段时间,在vs2010里写了一下winform的代码,后来由于.net framework太大,就已.net framework 2.0发布。奇怪的是,编译的时候只是提醒如 system.linq不存在,而一些.net 3.5的语法 还能用 比如 lambda 表达式,比如说自动属性的写法,很是神奇。下面是我做的实验。

  显然,扩展方步不支持,编译就不通过:

其他的测试 编译都通过,代码如下:

代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
class Program
{

static void Main(string[] args)
{
//测试lambda表达式
Thread thread = new Thread((object state) =>
{
Console.WriteLine(
"奶奶的!lambda表达式竟然可以用!");
});
thread.Start();

//测试 隐式类型局部变量
var a = " 神了!隐式类型局部变量可以用! ";
Console.WriteLine(a);

//测试 自动属性
Test test = new Test();
test.AutoProperty
= "乖乖!自动属性页可以用啊!";
Console.WriteLine(test.AutoProperty);

////测试 扩展方法
//string ss = "ss";
//Console.WriteLine(ss.TestExtension());

//测试 对象初始化器
test = new Test() { AutoProperty = "无语了,对象初始化器也支持!" };
Console.WriteLine(test.AutoProperty);

//试试数组
List<string> list = new List<string>(){"哎呀,", "数组的初始化也可以啊!"};
Console.WriteLine(list[
0] + list[1]);

//测试默认参数
test = new Test();
Console.WriteLine(test.TestDefaultParameter());

//测试匿名类型
var anonymousType = new { A = "真是的,", B = "匿名类型也支持啊", C = "看来语法都支持啊" };
Console.WriteLine(anonymousType.A
+ anonymousType.B + anonymousType.C);

}
}

//static class StringExtension
//{
// public static string TestExtension(this String str)
// {
// return "不会吧!连扩展方法都支持啊!太神了!";
// }
//}

partial class Test
{
public string AutoProperty
{
get;
set;
}

public string TestDefaultParameter(string a = "看来默认参数也支持!")
{
return a;
}

}


}

 

 

.net framework 2.0 配置:

 

编译一下,然后放到只装有.net framework 2.0 sp1的机器上。确认一下只有 .net framework 2.0 

 

运行结果:

看来 编译通过的 在只有.net framework 2.0的环境中 都运行正常。

总结一下, 在只有.net framework 2.0 环境中, 可以使用的C# 3.0/4.0的特性有:

  1. lambda表达式
  2. 隐式类型局部变量
  3. 自动属性页
  4. 对象初始化器,数组的初始化
  5. 默认参数也支持
  6. 匿名类型

暂时知道的不支持的有

  1. 扩展方法
  2. linq

由于.net 4.0中一些语法还没有完全搞懂,就先不测这些了。

原来我是在网上找了半天,都没有这方面的介绍,所以就自己研究起来,顺便share给大家一下。由于第一次在博客园发文章,有什么不太妥的地方,还希望各位高手指点,比如为什么这样。

  我个人认为,原因应该是这些新语法在编译器编译后生成的程序集中的IL,已经转化成.net framework 2.0的格式了。

好了,就写到这吧,如果有高手了解这个情况,还希望在评论中指点一下,谢谢了。

 

应网友要求 我把源代码贴上来了 源代码,我可以是VS2010写的哦。

感谢网友积极的评论

posted on 2010-11-06 20:23  Ligen  阅读(7801)  评论(29)    收藏  举报