前段时间,在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给大家一下。