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

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

clip_image001

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

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 配置:

clip_image001[4]

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

clip_image002

运行结果:

clip_image003

看来 编译通过的 在只有.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给大家一下。

源链接

Hacking more

...