在VS2008 和 VS2010 中写代码, 最后以.net 2.0发布, 能用 .net 3.5的语法
时间:2010-11-06 来源:Ligen
显然,扩展方步不支持,编译就不通过:
其他的测试 编译都通过,代码如下:
代码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的特性有:
- lambda表达式
- 隐式类型局部变量
- 自动属性页
- 对象初始化器,数组的初始化
- 默认参数也支持
- 匿名类型
暂时知道的不支持的有
- 扩展方法
- linq
由于.net 4.0中一些语法还没有完全搞懂,就先不测这些了。
原来我是在网上找了半天,都没有这方面的介绍,所以就自己研究起来,顺便share给大家一下。由于第一次在博客园发文章,有什么不太妥的地方,还希望各位高手指点,比如为什么这样。
我个人认为,原因应该是这些新语法在编译器编译后生成的程序集中的IL,已经转化成.net framework 2.0的格式了。
好了,就写到这吧,如果有高手了解这个情况,还希望在评论中指点一下,谢谢了。
相关阅读 更多 +