.net 3.0 C# 新特性

香水坏坏 发表于 2007-8-20 [ASP.NET]

很多人在讨论下一代C#中的LINQ。尽管如此,就算没有LINQ,C#3.0也是一次引人注目的升级。

下面是C#3.0中一些常用新特性。

你可以选择针对早期.net框架的开发
这里或许有很多原因你想在早期.net框架下编写程序。在VS2005中,这是不可能实现的。
VS2008后,可以很方便实现这个目的。
右击工程-》属性-》应用程序

自动完成属性的设置
这个特性非常容易创建类。
class Point {

            public int X { get; private set; }

            public int Y { get; private set;}

            public Point(int x, int y) {

                X = x;

                Y = y;

            }

        }
上面,X Y是正确的属性因为编译器在背后提供了一个隐藏的操作。
这样简洁的表达形式,非常好吧。呵呵

更方便的委托
在2.O编译器下,你可以这样定义一个委托:
Func<int, int> mydelegate = delegate(int x) { return x + 1; };
在C#3.0中,可以这样缩写:
Func<int, int> mydelegate = x => x + 1;

var类型
现在编译器能够自动识别你想要的类型。
var name= "Llinzzi";
其实var关键词和object并不一样。不同是编译器知道变量名的类型。例如,下面代码可以被顺利编译:
public static int GetName() {
            var name = "Llinzzi";
            return name.Length;
}

如果你把var改成object,上面的代码将无法编译通过,因为object类型并不包含Length方法。
可能你会担心当别人看你写代码怎么知道是什么类型以及明白可能会要做什么。其实当你把鼠标移动到var上,
编辑器将给出提示。

集合初始化
现在可以这样初始化一个集合。
var mystrings = new List<string> { "Llinzzi", "HH" };
唯一的要求是集合必须继承并实现了IEnumerable类型。比起C#2.0相应的代码更简洁。
List<string> mystrings = new List<string>();
mystrings.Add("Llinzzi");
mystrings.Add("HH");

方法扩展
方法扩展可以让你添加新的方法到已经存在的类型上。
下面示例告诉你如何添加一个新方法到内建的string类上。
public static class MyStringMethods {
        public static string Reverse(this string s) {
            StringBuilder sb = new StringBuilder(s.Length);
            for (int i = s.Length - 1; i >= 0; --i) {
                sb.Append(s[i]);
            }
            return sb.ToString();
        }
}
与通常类方法不一样地是,扩展方法不允许访问类私有以及受保护的成员。

表达式树
表达式树允许你获取和操作运行时的函数的结构。
看看这个委托
Func<int, int> myexpr = x => x + 1;
现在,小小的改变将允许你作为表达式树来获取这个函数。象这样添加Expression<>到Func<int,int>
外面:
Expression<Func<int, int>> myexpr = x => x + 1;
使用如上的表达式树的方法,你可以使用过滤器变量中的各种属性来检查树的内容。

1332 2 标签:LINQ vs2008 
访客评论
  • fx    [2007-8-21]
    没看明白啊
  • llinzzi    [2007-8-20]
    方法扩展 这东西又好又不好....
    没看明白这个方法的周期.
    这个方法的周期是在MyStringMethods这个类被调用的时候么?
发表评论
  • 你的姓名:
  • 你的网站:
  •   EMAIL:   
  • 评论内容:
  • 私人